欢迎您访问 最编程 本站为您分享编程语言代码,编程技术文章!
您现在的位置是: 首页

mysql 触发器是否与主从复制相同 mysql 触发器的用法和语法

最编程 2024-06-13 21:50:22
...


今天学习MySQL中的触发器。触发器是用户定义在关系表上的一类由事件驱动的特殊过程,能够加强数据库表中数据的完整性约束和业务规则等。类似于现实中的监控一样,当检测到指定目标时,就会执行一些步骤(如:报警)。

创建触发器

基本语法:

create trigger 触发器名
before|after 触发事件 on 表名
for each row 
激活触发器后被执行的语句;

create trigger 是创建触发器的关键字;before | after关键字用来指定触发器的执行时间,before表示在触发事件之前执行触发器语句,after 表示在触发器事件之后执行触发器语句;触发事件 为触发器执行的条件,包含deleteinsertupdate语句;表名用来表示触发事件操作表的名字;for each row 设置触发器的类型为行级触发器。
如果被执行的语句是多条,需要包含在begin ... end 之间。如:

create trigger 触发器名
before|after 触发事件 on 表名
for each row 
begin
语句1;
语句2;
...
语句n;
end;

每条语句之间使用;隔开。但是由于创建触发器语句的结束符也是;,所以需要通过关键字delimiter,将结束符设置为其他符号。下面是多条语句创建触发器的完整过程:

delimiter $$      # 把结束符 设置为`$$`

create trigger 触发器名
before|after 触发事件 on 表名
for each row 
begin
语句1;
语句2;
...
语句n;
end $$    # 使用结束符

delimiter ;  # 把结束符还原为默认的`;`

实例:创建一个触发器,当更新学生成绩时,把成绩操作记录存入表sc_u(s_id, c_id, old_grade, new_grade)中。代码如下:

delimiter $$
create trigger sc_t
after update on tab_sc
for each row
begin
	insert into sc_u (s_id, c_id, old_grade, new_grade)
	values ( old.s_id, old.c_id, old.sc_grade, new.sc_grade);
end $$
delimiter ;

在上述代码中使用了 old.列名new.列名两个标识符,用于标识不同状态下的列名;old.列名 表示在更新或删除之前引用行的列;new.列名 表示引用要插入的新行的列或更新后的现有行的列。所以insert语句中new.列名是合法的,在delete语句中old.列名是合法的,在update语句中old.列名new.列名都合法。

查看触发器

语法

描述

show triggers

显示所有触发器的信息

show create trigger 触发器名

查看指定触发器的定义信息

删除触发器

使用drop trigger 触发器名;语句来删除指定触发器。

结束

本篇文章主要学习了 触发器的创建、触发器的查看、触发器的删除。内容比较多的是触发器的创建,它可以和 数据的增删改组合,来提高数据的完整性。但在使用触发器时也要慎重,因为在每次访问一个表时都可能触发一个触发器,这样会影响系统的性能。


推荐阅读