触发器

触发器是一种过程完整性约束(CREATE TABLE 中定义的是非过程性约束)。触发器是一段小程序,在程序在特定的时刻被自动触发执行。

基本语法

image

语法含义:当某一事件(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中插入一条记录。

更新前的记录

image

更新后的记录

image

error_log表中的数据

image

error_log表中多了一条记录,表示更新出现错误(001的工资变少了)

MYSQL触发器的使用请见

https://dev.mysql.com/doc/refman/5.5/en/triggers.html

posted @ 2016-10-31 20:05  被罚站的树  阅读(398)  评论(0编辑  收藏  举报