触发器在满足定义条件时触发,并执行触发器中定义的语句集合,这使得我们可以利用触发器做一些有用的事情,比如在新增、更新记录时记录操作的时间,在删除记录时把记录进行备份或写日志。 来个简单示例,先创建一个表: 再创建触发器: 该触发器定义了在向 account 表插入数据时会汇总 amount 字段的值到 @sum 用户变量中,这样我们就可以在每次执行插入后读取该用户变量,例如: 输出: 简单的触发器演示完了,删除这个触发器: 触发器可以附加到下面三个事件: INSERT 事件触发器示例: UPDATE 事件触发器示例: DELETE 事件触发器示例:mysql> CREATE TABLE account (acct_num INT, amount DECIMAL(10,2));
mysql> CREATE TRIGGER ins_sum BEFORE INSERT ON account
-> FOR EACH ROW SET @sum = @sum + NEW.amount;
mysql> SET @sum = 0;
mysql> INSERT INTO account VALUES(10, 10.23),(12, 137.50),(13, -100.00);
mysql> SELECT @sum AS 'Total Amount Inserted';
+-------------------------+
| Total Amount Inserted |
+-------------------------+
| 47.73 |
+-------------------------+
mysql> DROP TRIGGER test.ins_sum;
DELIMITER $
CREATE TRIGGER insert_date
BEFORE INSERT ON stack
FOR EACH ROW
BEGIN
-- 在插入执行之前对 insert_date 字段赋值
SET NEW.insert_date = NOW();
END;
$
DELIMITER ;
DELIMITER $
CREATE TRIGGER update_date
BEFORE UPDATE ON stack
FOR EACH ROW
BEGIN
-- 在更新执行之前对 update_date 字段赋值
SET NEW.update_date = NOW();
END;
$
DELIMITER ;
DELIMITER $
CREATE TRIGGER deletion_date
AFTER DELETE ON stack
FOR EACH ROW
BEGIN
-- 在删除成功之后向 log_action 表插入一条删除日志
INSERT INTO log_action(stack_id, deleted_date) VALUES(OLD.id, NOW());
END;
$
DELIMITER ;