首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

MySQL触发器了解一下

简介 触发器是与表有关的数据库对象,当表发生INSERT/UPDATE/DELETE操作时,对应操作的触发器会被触发,将在这些操作之前或之后执行触发器中定义的SQL语句集合。...触发器的使用 创建触发器 语法: CREATE [DEFINER = user] TRIGGER trigger_name trigger_time trigger_event...(从MySQL 5.7.2开始,可以为表创建具有相同trigger_time和trigger_event的多个触发器,默认顺序是按创建顺序进行激活) trigger_body:触发器激活时要执行的语句。...NAME); 当在MySQL命令行创建执行多个语句的触发器时,同存储过程一样,也需要修改语句分隔符,如下: mysql> delimiter // mysql> CREATE TRIGGER upd_check...DELETE触发器:当在表中删除一行时,触发器就会激活。删除操作只有旧行,所以只有OLD关键字可用,可以通过OLD访问删除的旧行数据。 UPDATE触发器:当表中一行数据被修改时,触发器就会激活。

77210

Mysql The user specified as a definer (test@%) does not exist

我们在mysql创建view、trigger、function、procedure、event时都会定义一个Definer=‘xxx’,类似如下: CREATE ALGORITHM = UNDEFINED...默认情况下,系统指定为DEFINER 以存储过程为例: (1)MySQL存储过程是通过指定SQL SECURITY子句指定执行存储过程的实际用户; (2)如果SQL SECURITY子句指定为DEFINER...子句,MySQL默认将以DEFINER执行存储过程。...由于前期在测试库上开发的缘故,我们经常定义到的definer为`root`@`%`,后来搬移到生产库上又得改回来,存在着大量的更新,上百个的视图,函数等一个个改不免太麻烦并且也可能遗漏。...4.修改trigger的definer 目前还没有具体方便的方法,可以借助工具端如HeidiSQL、sqlyog等来一个个修改。

2K10
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    Server层表级别对象字典表 | 全方位认识 information_schema

    列的值并不会更新,但可以通过删除和重新创建视图来更新该值 DEFINER:创建视图的账户名称 SECURITY_TYPE:表示视图以谁的身份来执行,有效值为:DEFINER(表示以定义者的身份来执行)、...def TRIGGER_SCHEMA和TRIGGER_NAME:表示触发器所属的数据库名称和触发器名称 EVENT_MANIPULATION:表示触发器触发事件在关联表上的操作类型,有效值为:“INSERT...) CREATE_OPTIONS:与CREATE TABLE一起使用的额外建表选项,如果记录的表为分区表,则该字段值为"partitioned" TABLE_COMMENT:创建表时使用的注释(或有关MySQL...在innodb表创建时没有显式定义row_format或者定义的row_format=default时,会使用到该变量的默认值。...+6小时之后执行)。

    1.1K20

    MariaDB 视图与触发器

    数据库中的视图是一个虚拟表,同真实的表一样,视图包含一系列带有名称的行和列数据,行和列数据来自由定义视图查询所引用的表,并且在引用视图时动态生成,视图是从一个或者多个表中导出的,视图的行为与表非常相似,...,当表上出现特定事件时,将激活该对象.MariaDB 视图视图的含义:视图是一张虚拟表,是从数据库中一个或多个表中导出来的表,视图还可以从已经存在的视图基础上定义,视图一经定义便存储在数据库中,与其相对应的数据并没有像表那样在数据库中再存储一份...◆创建视图◆在单表上创建视图:1.首先创建一个基本表table1并插入测试数据.MariaDB [lyshark]> create table table1(quantity INT,price INT...#标识触发事件table_name #建立触发器表名,即在那张表上建立触发器trigger_stmt #触发器执行语句而创建多个执行语句的触发器的语法如下...:create trigger trigger_name trigger_time trigger_eventON table_name FOR EACH ROWBEGIN执行语句块...END◆创建触发器

    1.3K10

    创建视图与函数,你注意过 DEFINER 是啥意思吗

    MySQL中,创建视图(view)、函数(function)、存储过程(procedure)、触发器(trigger)、事件(event)时,都可以指定 DEFINER = user 选项,即指定此对象的定义者是谁...DEFINER 表示按定义者拥有的权限来执行,INVOKER 表示用调用者的权限来执行。 默认情况下,SQL SECURITY 属性为 DEFINER 。...其值为 DEFINER 时,数据库中必须存在 DEFINER 指定的定义者用户,并且该定义者用户拥有对应的操作权限及引用的相关对象的权限,执行者只需拥有调用权限就能成功执行。...当 SQL SECURITY 属性为 INVOKER 时,则需要执行者有调用权限并且有引用的相关对象的权限,才能成功执行。...当使用用户 u2 登录时,则创建视图来查询表 a 会直接报错缺少权限,即创建不了查询表 a 的视图,无论此视图的 SQL SECURITY 属性是什么。

    2.6K31

    常用数据库 SQL 命令详解(下)

    ,为默认值 OUT 输出参数:该值可在存储过程内部被改变,并可返回 INOUT 输入输出参数:调用时指定,并且可被改变和返回 创建一个查询用户信息的存储过程示例: DELIMITER $$ CREATE...四、触发器 触发器是与表有关的数据库对象,在满足定义条件时触发,并执行触发器中定义的语句集合。...4.1、创建触发器 定义语法 CREATE [DEFINER = { user | CURRENT_USER }] TRIGGER trigger_name trigger_time trigger_event...相当与一系列的INSERT操作); UPDATE型触发器:更改某一行时激活触发器,可能通过UPDATE语句触发; DELETE型触发器:删除某一行时激活触发器,可能通过DELETE、REPLACE语句触发...CREATE TRIGGER 触发器名 BEFORE|AFTER 触发事件 ON 表名 FOR EACH ROW BEGIN 执行语句列表 END; 示例如下: DELIMITER

    95920

    TDSQL案例:账户加固会影响到视图无法访问?

    我们估计是视图的definer被删除导致,查看用户故障视图,果然发现其定义者就是被删除的用户。...我们对SQL SECURITY 解释中,默认definer策略下,当前账户只需要有试图的select权限即可以正常的引用,其中对原表数据访问实际上使用到了定义者的权限,如果我们对定义者的权限进行完全破坏...,实际上也是会失去对视图的使用。...由于云上实例通常不存在super权限,所以无法直接使用super账户直接将视图从a归属到b名下,但是却可以使用b账户登录实例,对视图进行definer的变更操作。...如截屏: MariaDB [alan]> show create table aaa\G *************************** 1. row *********************

    963190

    故障分析 | 更新用户信息导致 MySQL 从库复制异常

    默认值(空):当不设置时,不允许属性的提升或降级;这意味着源表和目标表中的所有列必须具有相同的类型。...也就是在 SECURITY_TYPE 为 DEFINER 时,如果该存储过程的所属用户被删除了,那这个存储过程即被标识为失效/孤儿的存储对象(数据库中也叫做 Orphan Stored Objects)...也就是在 SECURITY_TYPE 为 INVOKER 的情况下,即使该存储过程的所属用户被删除了,只要调用者有该存储过程的执行权限及对应库表的权限,依旧可以正常使用。 3....在创建时,应优先选定 SQL SECURITY 为 INVOKER,如此一来,即便被定义为 DEFINER 的用户遭到删除,也不会对对象的调用产生影响(可能会出现权限不足的提示,但不会提示用户不存在),...; select TRIGGER_SCHEMA,TRIGGER_NAME,DEFINER from information_schema.TRIGGERS; ## ⽤户权限校验 select user

    6410

    技术分享 | 改写 mysqldump 解决 DEFINER 问题

    ---- 一、背景 项目上 MySQL 还原 SQL 备份经常会碰到一个错误如下,且通常出现在导入视图、函数、存储过程、事件等对象时,其根本原因就是因为导入时所用账号并不具有SUPER 权限,所以无法创建其他账号的所属对象...%` trigger t_test --事件定义 CREATE DEFINER=`root`@`%` EVENT `e_test` DEFINER:对象定义者,在创建对象时可以手动指定用户,不指定的话默认为当前连接用户...; SQL SECURITY:指明以谁的权限来执行该对象,有两个选项,一个为 DEFINER,一个为 INVOKER,默认情况下系统指定为 DEFINER; DEFINER:表示按定义者的权限来执行;...五、备份顺序 如下是 mysqldump 备份对象时的顺序,值得注意的是 mysqldump 在备份表的时候会连带视图也一起备份,但是只是临时视图(常量别名替换实际列),主要是为了防止后续其他视图、函数与存储过程中用到该视图...6.3 DEFINER 摘除 trigger 与 event 的 DEFINER 是在 dump_trigger |dump_events_for_db->cover_definer_clause 函数中通过

    1.7K30

    《MySQL核心知识》第12章:触发器

    触发程序是与表有关的命名数据库对象,当表上出现特定事件时,将激活该对象。...UPDATE:更改某一行时激活触发程序,例如,通过UPDATE语句。 DELETE:从表中删除某一行时激活触发程序,例如,通过DELETE和REPLACE语句。...trigger_stmt是当触发程序激活时执行的语句。 如果你打算执行多个语句,可使用BEGIN ... END复合语句结构。这样,就能使用存储子程序中允许的相同语句。...创建一个单执行语句的触发器 CREATE TABLE account(acct_num INT ,amount DECIMAL(10,2)); CREATE TRIGGER ins_sum BEFORE...表示触发器所在的数据库 TRIGGER_NAME表示触发器的名称 EVENT_OBJECT_TABLE表示在哪个表上触发 ACTION_STATEMENT 表示触发器触发的时候执行的具体操作 ACTION_ORIENTATION

    39220

    MySQL 之高级命令(精简笔记)

    使用CREATE TABLE创建表时,除了可以定义列的数据类型,还可以定义主键约束、外键约束或者唯一性约束,而不论创建那种约束,在定义约束的同时相当于在指定列上创建了一个索引。...添加索引 在已经存在的表中创建索引,可以使用alter table语句或者create index语句,本节将介绍如何在一个已经存在的表上创建一个索引,首先先来看一下索引的添加语法,SQL语句如下: alter...,book表的comment字段上建立了名称为BkcmtIdx的索引,长度为50,查询时只需要检索前50个字符....#建立触发器表名,即在那张表上建立触发器 trigger_stmt #触发器执行语句 而创建多个执行语句的触发器的语法如下: create trigger trigger_name...trigger_time trigger_event ON table_name FOR EACH ROW BEGIN 执行语句块...

    1.1K10

    MySQL学习笔记-进阶部分

    数据库对象可以包括表、默认约束、规则、视图、触发器以及存储过程等。不同数据库对象,其执行语句(如 CREATE 和 DROP )的语法形式也不同。...默认为contains sqlsql security{ definer/invoker } 指明谁有权限执行该函数。definer意为只有定义者才能执行;invoker意为拥有权限的调用者可以执行。...默认为contains sqlsql security{ definer/invoker } 指明谁有权限执行该函数。definer意为只有定义者才能执行;invoker意为拥有权限的调用者可以执行。...注意:触发器中不能对本表进行insert,update,delete操作,以免递归循环触发错误case解决:delimiter $$create trigger trigger_deleteForStudent...解决办法:student表上的触发器里 不能再更新(insert、update、delete)student表,只能操作其他表。

    41620

    Mysql数据库基础知识总结,结构分明,内容详细

    表名,列名(或字段名),数据类型,长度 可选指定: 约束条件,默认值 a.表的创建 创建方式1 创建方式2 查看表结构 SHOW CREATE TABLE 表名\G b.表的修改...视图的创建和删除只影响视图本身,不影响对应的基表。但是当对视图中的数据进行增加、删除和修改操作时,数据表中的数据会相应地发生变化,反之亦然。...默认情况下,系统会指定为CONTAINS SQL。 SQL SECURITY { DEFINER | INVOKER } :执行当前存储过程的权限,即指明哪些用户能够执 行当前存储过程。...SQL SECURITY { DEFINER | INVOKER } ,指明谁有权限来执行。 DEFINER ,表示只有定义者自己才能够执行。 INVOKER ,表示调用者可以执行。...a.触发器的创建 创建触发器语法 CREATE TRIGGER 触发器名称 {BEFORE|AFTER} {INSERT|UPDATE|DELETE} ON 表名 FOR EACH ROW 触发器执行的语句块

    1.2K41
    领券