美文网首页MySQL
MySQL数据库——触发器

MySQL数据库——触发器

作者: 阁下_3258 | 来源:发表于2022-07-27 22:20 被阅读0次

    触发器的定义

    触发器(Trigger)是用户定义在关系表上的一类由事件驱动的特殊过程 , 若任何用户对表的增、删、改操作均由服务器自动激活相应的语句块。

    触发器类似于火灾报警装置,即若报警装置检测到火灾则立即报警;换成触发器即为:若触发器检测到用户对某张表进行相关操作时,触发器则立即执行对应的提前设置好的命令。

    触发器的定义

    CREATE TRIGGER name /*触发器名*/
    [AFTER|BEFORE] [DELETE|INSERT|UPDATE]  ON 表名
    FOR EACH ROW   #这句话在mysql是固定的  
    BEGIN  
         -- 触发器动作 --
    END;
    

    注:[AFTER|BEFORE]是指触发时序,[DELETE|INSERT|UPDATE]是触发条件。

    1. AFTER 之后触发,即是指触发器监视的触发事件执行之后。
    2. BEFORE之前触发,即是指触发器监视的触发事件执行之前。

    NEW和OLD

    • NEW:修饰符用来访问操作完成列后的值。
    • OLD:修饰符用来访问操作完成前列的值。
    • 用法:修饰符.列名
    特性 INSERT UPDATE DELETE
    NEW 有效 有效 NULL
    OLD NULL 有效 有效

    样例

    若当前有两张表:学生表(students)和成绩表(scores),其中学生表主键为学号(sid),且 sid 为成绩表的外键,详细如下:

    学生表 成绩表

    若我们要在学生表(students)中删除一条信息,则对应成绩表(scores)中该学生的信息也留之无用也要对应删除,这是我们就可以设置一个删除触发器del_1

    因为我们是在学生表(students)操作触发,所有我在学生表(students)上创建,同时是我们在做删除动作时触发的所以要选用触发条件为delete;同时为防止在删除该学生信息时由外键引发一些错误,所以我们选用BEFORE之前触发。即具体代码如下:

    CREATE TRIGGER 'del_1'
    BEFORE DELETE ON 'students'
    FOR EACH ROW
    BEGIN  
        delete from 'scores' where sid=old.sid;
    END;
    

    删除触发器

    使用DROP TRIGGER语句可以删除MySQL中定义的触发器,基本语法形式如下:

    DROP TRIGGER 触发器名 ON 表名;
    
    -- 例:删除我们刚创建的触发器 del_1
    DROP TRIGGER 'del_1' ON 'students';
    

    相关文章

      网友评论

        本文标题:MySQL数据库——触发器

        本文链接:https://www.haomeiwen.com/subject/lwhtwrtx.html