博客
关于我
MySQL触发器使用详解
阅读量:536 次
发布时间:2019-03-09

本文共 1792 字,大约阅读时间需要 5 分钟。

MySQL触发器是一种强大的数据库功能,用于在特定数据库操作发生时自动执行预定义的操作。以下将从基础到高级内容详细介绍MySQL触发器的使用方法。

1.触发器的基本概念

触发器可以被视为数据库的事件响应器。当某一特定表执行特定操作(如插入、更新或删除)时,触发器会自动执行关联的操作。这种机制非常有用,能够帮助开发者维护数据一致性和完整性。

2.触发器的创建

在MySQL中创建触发器的基本语法如下:

DELIMITER $  -- 定义新的分隔符为$CREATE TRIGGER trigger_name    trigger_time    ON tbl_name    FOR EACH ROW    trigger_stmt$  -- 结束BEGIN...END语句DELIMITER ;  -- 恢复默认分隔符

3.触发器的关键参数解析

  • trigger_name:用户自定义的触发器名称。
  • trigger_time:触发时机,取值为BEFOREAFTER
  • trigger_event:触发事件,取值为INSERTUPDATEDELETE
  • tbl_name:触发器关联的表名。
  • trigger_stmt:触发器的具体操作语句,可以是单个SQL语句或包含BEGINEND的复合语句。

4.触发器的类型

根据触发事件,MySQL支持以下6种触发器类型:

  • BEFORE INSERT:在插入新数据前执行。
  • BEFORE UPDATE:在更新数据前执行。
  • BEFORE DELETE:在删除数据前执行。
  • AFTER INSERT:在插入新数据后执行。
  • AFTER UPDATE:在更新数据后执行。
  • AFTER DELETE:在删除数据后执行。
  • 5.复合语句的使用

    为了实现复杂的操作,触发器支持使用BEGINEND语句来包含多条SQL语句。此外,为了处理多条语句,需要使用DELIMITER命令定义一个新的分隔符。

    DELIMITER $  -- 将分隔符更改为$CREATE TRIGGER tri_example AFTER INSERT ON tbl_example FOR EACH ROWBEGIN    INSERT INTO log_table (col1, col2) VALUES (NEW.col1, NEW.col2);    UPDATE tbl_example SET status = '已录入' WHERE id = new.id;END$DELIMITER ;  -- 恢复默认分隔符

    6.变量的使用

    在触发器中可以使用DECLARE声明局部变量,使用SET赋值。变量在触发器内部使用,并且只能在BEGIN...END语句中访问。

    DELIMITER $  -- 定义新的分隔符CREATE TRIGGER tri_stuInsert AFTER INSERT ON student FOR EACH ROWBEGIN    DECLARE stuCount INT DEFAULT 0;    SET stuCount = (SELECT stuCount FROM class WHERE classID = new.classID);    UPDATE class SET stuCount = stuCount + 1 WHERE classID = new.classID;END$DELIMITER ;

    7.NEW和OLD的使用

    • NEW:表示新插入的数据,可以用于修改触发器中的数据。
    • OLD:表示旧的数据,只读,不能修改。

    8.触发器的管理

    • 查看触发器:使用SHOW TRIGGERS命令可以查看所有触发器的信息。
    SHOW TRIGGERS FROM database_name;
    • 删除触发器:使用DROP TRIGGER命令可以删除触发器。
    DROP TRIGGER IF EXISTS trigger_name;

    9.触发器的执行顺序

    在InnoDB存储引擎中,触发器的执行顺序如下:

  • BEFORE触发器:在操作前执行。
  • 主语句:执行原始SQL语句。
  • AFTER触发器:在操作后执行。
  • 如果触发器执行失败,MySQL会回滚事务,确保数据一致性。

    通过以上步骤,可以轻松创建和管理MySQL触发器,充分发挥其强大功能。

    转载地址:http://vhmiz.baihongyu.com/

    你可能感兴趣的文章
    NSJSON的用法(oc系统自带的解析方法)
    查看>>
    nslookup 的基本知识与命令详解
    查看>>
    NSNumber与NSInteger的区别 -bei
    查看>>
    NSOperation基本操作
    查看>>
    NSRange 范围
    查看>>
    NSSet集合 无序的 不能重复的
    查看>>
    NSURLSession下载和断点续传
    查看>>
    NSUserdefault读书笔记
    查看>>
    NS图绘制工具推荐
    查看>>
    NT AUTHORITY\NETWORK SERVICE 权限问题
    查看>>
    NT symbols are incorrect, please fix symbols
    查看>>
    ntelliJ IDEA 报错:找不到包或者找不到符号
    查看>>
    NTFS文件权限管理实战
    查看>>
    ntko web firefox跨浏览器插件_深度比较:2019年6个最好的跨浏览器测试工具
    查看>>
    ntko文件存取错误_苹果推送 macOS 10.15.4:iCloud 云盘文件夹共享终于来了
    查看>>
    ntp server 用法小结
    查看>>
    ntpdate 通过外网同步时间
    查看>>
    ntpdate同步配置文件调整详解
    查看>>
    NTPD使用/etc/ntp.conf配置时钟同步详解
    查看>>
    NTP及Chrony时间同步服务设置
    查看>>