@Cesar
2016-03-23T10:16:21.000000Z
字数 1251
阅读 1479
sql
MySQL包含对触发器的支持。触发器是一种与表操作有关的数据库对象,当触发器所在表上出现指定事件时(如增删查改),将调用该对象,即表的操作事件触发表上的触发器的执行。
CREATE TRIGGER trigger_name
trigger_time
trigger_event ON tbl_name
FOR EACH ROW
trigger_stmt
BEGIN … END
在MySQL中,BEGIN … END语句的语法为:
BEGIN
[statement_list]
END
变量
MySQL 中使用 DECLARE 来定义一局部变量,该变量只能在 BEGIN … END 复合语句中使用,并且应该定义在复合语句的开头,
即其它语句之前,语法如下:
DECLARE var_name[,...] type [DEFAULT value]
对变量赋值采用 SET 语句,语法为:
SET var_name = expr [,var_name = expr]
其中:
old和new关键字
在 DELETE 型触发器中,OLD 用来表示将要或已经被删除的原数据;
使用方法: NEW.columnName (columnName为相应数据表某一列名)另外,OLD 是只读的,而NEW则可以在触发器中使用 SET赋值,这样不会再次触发触发器,造成循环调用(如每插入一个学生前,都在其学号前加“2013”)。
注:
在Mysql中,update与insert触发器是不可以在语句中继续使用update的,官方的说法是为了防止死循环。解决的方法是直接在new里面对需要改动变量进行赋值
DROP TRIGGER IF EXISTS test.`Hello`;
DELIMITER $$
CREATE TRIGGER `test`.`Hello` BEFORE UPDATE
ON `test`.`order` FOR EACH ROW
BEGIN
SET new.update_time=NOW();
END $$
DELIMITER;