MySQL 触发器简单实例 语法 CREATE TRIGGER <触发器名称> –触发器必须有名字,最多64个字符,可能后面会附有分隔符.它和MySQL中其他对象的命名方式基本相象. { BEFORE | AFTER } –触发器有执行的时间设置:可以设置为事件发生前或后。 { INSERT | UPDATE | DELETE } –同样也能设定触发的事件:它们可以在执行insert、update或delete的过程中触发。 ON <表名称> –触发器是属于某一个表的:当在这个表上执行插入、 更新或删除操作的时候就导致触发器的激活. 我们不能给同一张表的同一个事件安排两个触发器 MySQL触发器是数据库管理系统中的一种重要特性,它允许在特定的数据库操作(如INSERT、UPDATE或DELETE)之前或之后执行自定义的SQL语句。触发器可以用来维护数据的完整性和一致性,执行复杂的业务逻辑,或者实现一些自动化的数据处理。下面我们将详细探讨MySQL触发器的语法、类型以及如何创建和使用触发器。 ### 触发器的基本语法 创建触发器的基本语法如下: ```sql CREATE TRIGGER `<触发器名称>` { BEFORE | AFTER } { INSERT | UPDATE | DELETE } ON `<表名称>` [FOR EACH ROW] BEGIN <触发器SQL语句> END; ``` - **触发器名称**:定义触发器的唯一标识,最长64个字符。 - **BEFORE/AFTER**:指定触发器是在事件发生前还是发生后执行。 - **INSERT/UPDATE/DELETE**:定义触发器响应的数据库操作类型。 - **表名称**:触发器关联的表。 - **FOR EACH ROW**:可选,表示触发器对每次受影响的行单独执行,而非对整个操作执行一次。 ### 时间类型 - **BEFORE**: 触发器在实际的数据库操作执行之前触发。 - **AFTER**: 触发器在数据库操作执行之后触发。 ### 事件类型 - **INSERT**: 当新记录插入表时触发。 - **UPDATE**: 当表中的记录被更新时触发。 - **DELETE**: 当表中的记录被删除时触发。 ### 示例应用 #### 实例1:数据同步 创建两个表`tab1`和`tab2`,然后创建一个名为`t_afterinsert_on_tab1`的触发器,在`tab1`中插入新记录后,自动将该记录复制到`tab2`中: ```sql CREATE TABLE tab1 (tab1_id varchar(11)); CREATE TABLE tab2 (tab2_id varchar(11)); CREATE TRIGGER t_afterinsert_on_tab1 AFTER INSERT ON tab1 FOR EACH ROW BEGIN INSERT INTO tab2(tab2_id) VALUES (NEW.tab1_id); END; INSERT INTO tab1(tab1_id) VALUES ('0001'); SELECT * FROM tab1; SELECT * FROM tab2; ``` #### 实例2:级联删除 创建一个名为`t_afterdelete_on_tab1`的触发器,当`tab1`中的记录被删除时,同时删除`tab2`中对应的记录: ```sql CREATE TRIGGER t_afterdelete_on_tab1 AFTER DELETE ON tab1 FOR EACH ROW BEGIN DELETE FROM tab2 WHERE tab2_id = OLD.tab1_id; END; DELETE FROM tab1 WHERE tab1_id = '0001'; SELECT * FROM tab1; SELECT * FROM tab2; ``` ### 权限与限制 创建触发器需要`CREATE TRIGGER`权限,通常只有数据库管理员(如Root用户)才拥有此权限。同时,对于同一表的相同事件,不能设置两个触发器。 ### 结论 MySQL触发器提供了一种强大的机制,可以在数据库操作前后自动执行额外的逻辑。它们在保持数据一致性和实施复杂业务规则方面具有重要作用。通过理解触发器的语法和实例,你可以更好地利用MySQL来构建高效、健壮的数据库系统。在实际应用中,应谨慎设计和使用触发器,避免可能导致性能下降或不易维护的情况。




















- 粉丝: 3
我的内容管理 展开
我的资源 快来上传第一个资源
我的收益
登录查看自己的收益我的积分 登录查看自己的积分
我的C币 登录后查看C币余额
我的收藏
我的下载
下载帮助


最新资源
- springboot-基于BS的社区物业管理系统(源码+sql脚本).zip
- tencentcloud-iot-sdk-embedded-c-master.zip
- 初学者指南:18um工艺下Bandgap带隙基准电压与参考电路设计及仿真技巧
- springboot-基于java的校园服务平台(源码+sql脚本).zip
- 电驱动车辆主动前轮转向(AFS)与主动后轮转向(ARS)的仿真搭建与LQR控制方法设计 仿真建模 终极版
- 一维CNN迁移学习在轴承故障诊断中的应用:基于PyTorch的域适应联合对齐实践
- linux-headers-6.14.0-24-6.14.0-24.24-all.deb
- GD32F470 RT-thread 4.1.1 修改带有dma接收的驱动
- linux-headers-6.14.0-24-generic-6.14.0-24.24-amd64.deb
- linux-image-6.14.0-24-generic-6.14.0-24.24-amd64.deb
- 同步旋转坐标系下无位置传感器永磁同步电机控制:三相电压重构技术及其MATLAB实现
- 4.19.191.ko
- 基于Matlab的计算机视觉单指针百分数表盘识别系统:霍夫变换与GUI设计
- ### 苏州华芯微电子股份有限公司射频产品介绍
- linux-modules-6.14.0-24-generic-6.14.0-24.24-amd64.deb



- 1
- 2
前往页