触发器
触发器是一种过程完整性约束(CREATE TABLE 中定义的是非过程性约束)。触发器是一段小程序,在程序在特定的时刻被自动触发执行。
基本语法
语法含义:当某一事件(INSERT,DELETE,UPDATE)发生时,我们可以根据该事件产生的结果来判断是否执行后面的程序段。
示例
设计一个触发器,当进行teacher表更新元组时,其工资只能升不能降
DELIMITER $$
CREATE TRIGGER teacher_chgsal
BEFORE UPDATE ON teacher
FOR EACH ROW
BEGIN
IF NEW.salary < OLD.salary THEN
INSERT INTO error_log VALUES("invalid salary update");
END IF;
END$$
DELIMITER ;
在上面的代码中,我们重新定义结束符为$$(MYSQL命令行客户端一个SQL语句的结束标志位是;),因为我们在写触发器程序时需要用到分号。上面的触发器规定在对teacher进行更新操作时之前,会对每个更新操作进行检查(FOR EACH ROW),因为用户的一条SQL语句可以进行多行更新。检查的内容是BEGIN…END中间的代码块。NEW表示更新后的元组,OLD表示在更新操作执行前数据库中存储的元组。如果发现更新的值小,则在error_log中插入一条记录。
更新前的记录
更新后的记录
error_log表中的数据
error_log表中多了一条记录,表示更新出现错误(001的工资变少了)
MYSQL触发器的使用请见