trigger
-
如何创建 INSERT 触发器。
只有一个执行语句的时候
create trigger 触发器名 befor/after
on 表名 for each row
执行语句
有多个执行语句的时候
create trigger 触发器名 befor/after
on 表名 for each row
begin
执行语句列表
end
查看触发器
- 查询系统已有的触发器,可以是如下命令之一:
show triggers\G
show triggers like '%Student%'
select * from information_schema.triggers where trigger_name like 'update%'\G
其中的\G是以表格的形式输出
删除触发器
drop trigger 触发器名;
Signal SQLSTATE
MySQL Signal SQLSTATE 语句用于向客户端发送一个信号,以便在存储过程或函数中处理异常情况。它的语法如下:
SIGNAL SQLSTATE 'sqlstate' SET message_text = 'message'
其中,sqlstate 是一个5个字符的 SQL 状态码,用于指示错误的类型。 message_text 是一个可选的错误消息,用于提供更详细的错误信息。
什么时候用before什么时候用after
这个是用before
use Student;
######### Begin #########
delimiter $$
create trigger dele_s1 before delete
on Student for each row
begin
SIGNAL SQLSTATE '03000' SET message_text = '不能删除该表中的数据';
end ;
$$
delimiter ;
########## End ##########
这个就是用after
use Student;
######### Begin #########
delimiter $$
create trigger dele_s2 after delete
on Student for each row
begin
delete from SC where SC.sno = old.sno;
end ;
$$
delimiter ;
########## End ##########
-
如何创建 DELETE 触发器。
触发器类型 NEW 和 OLD 的使用
MySQL 中定义了 NEW 和 OLD ,用来表示触发器的所在表中,触发了触发器的那一行数据,来引用触发器中发生变化的记录内容,具体地:
-
在 INSERT 触发器里,NEW 表示将要或者已经新增的数据;
-
在 UPDATE 触发器里,OLD 表示修改之前的数据,NEW 表示将要或者已经修改后的数据;
-
在 DELETE 触发器里,OLD 表示将要或者已经删除的数据。