MySQL_触发器

无奋斗不青春

课 程 推 荐
我 的 个 人 主 页:👉👉 失心疯的个人主页 👈👈
入 门 教 程 推 荐 :👉👉 Python零基础入门教程合集 👈👈
虚 拟 环 境 搭 建 :👉👉 Python项目虚拟环境(超详细讲解) 👈👈
PyQt5 系 列 教 程:👉👉 Python GUI(PyQt5)教程合集 👈👈
Oracle数据库教程:👉👉 Oracle数据库教程合集 👈👈
MySQL数据库教程:👉👉 MySQL数据库教程合集 👈👈
优 质 资 源 下 载 :👉👉 资源下载合集 👈👈
优 质 教 程 推 荐:👉👉 Python爬虫从入门到入狱系列 合集 👈👈
.

分隔线
在这里插入图片描述

MySQL_触发器

触发器
  • 触发器的引入
  • 创建与使用触发器
  • 查看触发器
  • 删除触发器

  • 触发器的引入
  • 触发器(TRIGGER)是由事件来触发某个操作。这些事件包括 INSERT 语句、UPDATE 语句和 DELETE 语句。当数据库系统执行这些事件时,就会激活触发器执行相应的操作。

  • 创建与使用触发器
  • 创建只有一个执行语句的触发器
    CREATE TRIGGER 触发器名 BEFORE | AFTER 触发事件
            ON 表名 FOR EACH ROW
            执行语句
    
  • 创建有多个执行语句的触发器
    DELIMITER &&
    CREATE TRIGGER 触发器名 BEFORE | AFTER 触发事件
            ON 表名 FOR EACH ROW
            BEGIN
                执行语句1;
                执行语句2;
                执行语句3;
                .
                .
                .
                执行语句4;
            END
    &&
    DELIMITER ;
    
  • 参数说明
    -- BEFORE:在触发事件发生之前
    -- AFTER:在触发事件发生之后
    -- ON 表名 FOR EACH ROW:指定表的每一行执行触发事件都执行下面的执行语句
    -- DELIMITER:定义结束符。其实就是告诉mysql解释器,该段命令是否已经结束了,mysql是否可以执行了。默认情况下,delimiter是分号;。在命令行客户端中,如果有一行命令以分号结束,那么回车后,mysql将会执行该命令。
    
  • 示例1(创建一个执行语句的触发器)
    • 先在t_bookType表增加bookNum字段,用于统计该类型书本的数量
    • 创建触发器,在t_book表中新增书籍,t_booktype表中的书本数量根据新增书籍的类型相应增加
    CREATE TRIGGER trig_book AFTER INSERT
        	ON t_book FOR EACH ROW
        	UPDATE t_booktype SET booknum=COALESCE(booknum,0)+1 WHERE new.booktypeid=t_booktype.id
    
    • 触发器解释
    CREATE TRIGGER trig_book AFTER INSERT
    -- 创建触发器,命名trig_book,指定在insert操作之后执行
    
    ON t_book FOR EACH ROW
    -- 指定t_book表每一行执行insert操作都将执行下面的执行语句
    
    UPDATE t_booktype SET booknum=COALESCE(booknum,0)+1 WHERE new.booktypeid=t_booktype.id
    -- insert执行之后要执行的执行语句
    
    new.booktypeid=t_booktype.id
    -- new:过渡变量,指代刚刚插入(更新)的那一条数据
    -- old:过渡变量,指代刚刚删除的那一条数据
    
  • 示例2(创建多个执行语句的触发器)
    • 创建t_log表,用于记录操作
    • 创建t_test表,用于测试执行语句
    -- 定义结束符为|,告诉MYSQL解释器出现|,则表示该段代码结束了,可以执行了
    DELIMITER |
    CREATE TRIGGER trig_book2 AFTER DELETE
        ON t_book FOR EACH ROW
    BEGIN
        UPDATE t_booktype SET booknum=COALESCE(booknum,0)-1 WHERE old.booktypeid=t_booktype.id;
        INSERT INTO t_log VALUES(NULL,NOW(),'在t_book表中删除了一条数据');
        DELETE FROM t_test WHERE old.booktypeid=t_test.id;
    END
    -- 告诉MYSQL解释器,该段代码结束了,可以执行了
    |
    -- 将MYSQL的结束符重新定义为 ;
    DELIMITER ;
    

  • 查看触发器
  • SHOW TRIGGERS 语句查看所有触发器信息
    show triggers;
    
  • 在系统表 triggers 表中查看触发器信息
    • 请添加图片描述

  • 删除触发器
    DROP TRIGGERS 触发器名;
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

失心疯_2023

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值