博客
关于我
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/

    你可能感兴趣的文章
    Openlayers高级交互(16/20):两个多边形的交集、差集、并集处理
    查看>>
    Openlayers高级交互(17/20):通过坐标显示多边形,计算出最大幅宽
    查看>>
    Openlayers高级交互(18/20):根据feature,将图形适配到最可视化窗口
    查看>>
    Openlayers高级交互(19/20): 地图上点击某处,列表中显示对应位置
    查看>>
    Openlayers高级交互(2/20):清除所有图层的有效方法
    查看>>
    Openlayers高级交互(20/20):超级数据聚合,页面不再混乱
    查看>>
    Openlayers高级交互(3/20):动态添加 layer 到 layerGroup,并动态删除
    查看>>
    Openlayers高级交互(4/20):手绘多边形,导出KML文件,可以自定义name和style
    查看>>
    Openlayers高级交互(5/20):右键点击,获取该点下多个图层的feature信息
    查看>>
    Openlayers高级交互(6/20):绘制某点,判断它是否在一个电子围栏内
    查看>>
    Openlayers高级交互(7/20):点击某点弹出窗口,自动播放视频
    查看>>
    Openlayers高级交互(8/20):选取feature,平移feature
    查看>>
    Openlayers高级交互(9/20):编辑图形(放缩、平移、变形、旋转),停止编辑
    查看>>
    Openlayers:DMS-DD坐标形式互相转换
    查看>>
    openlayers:圆孔相机根据卫星经度、纬度、高度、半径比例推算绘制地面的拍摄的区域
    查看>>
    OpenLDAP(2.4.3x)服务器搭建及配置说明
    查看>>
    OpenLDAP编译安装及配置
    查看>>
    Openmax IL (二)Android多媒体编解码Component
    查看>>
    OpenMCU(一):STM32F407 FreeRTOS移植
    查看>>