欢迎各位彦祖与热巴畅游本人专栏与博客
你的三连是我最大的动力
以下图片仅代表专栏特色 [点击箭头指向的专栏名即可闪现]
专栏跑道一
➡️ MYSQL REDIS Advance operation
专栏跑道二
➡️ 24 Network Security -LJS
专栏跑道三
➡️HCIP;H3C-SE;CCIP——LJS[华为、华三、思科高级网络]
专栏跑道四
➡️RHCE-LJS[Linux高端骚骚操作实战篇]
专栏跑道五
➡️数据结构与算法[考研+实际工作应用+C程序设计]
专栏跑道六
➡️RHCSA-LJS[Linux初级及进阶骚技能]
上节回顾https://netsecur-cloud-ljs.blog.csdn.net/article/details/142601038
目录
专栏跑道一 ➡️ MYSQL REDIS Advance operation
专栏跑道二➡️ 24 Network Security -LJS
➡️HCIP;H3C-SE;CCIP——LJS[华为、华三、思科高级网络]
专栏跑道四➡️RHCE-LJS[Linux高端骚骚操作实战篇]编辑
上节回顾https://netsecur-cloud-ljs.blog.csdn.net/article/details/142601038
1.MySQL触发器详解
简介
- 数据库触发器是一种在特定数据操作(如插入、更新或删除)发生时自动执行的动作。本文将介绍MySQL触发器的基础知识和使用方法。
1.1MySQL触发器基础
触发器分类
MySql执行时机和数据操作类型分类表
按执行时机分类 BEFORE触发器: 在数据操作之前执行触发器逻辑 AFTER触发器: 在数据操作之后执行触发器逻辑 按数据操作类型分类 INSERT触发器: 在插入数据之前或之后执行触发器逻辑 UPDATE触发器: 在更新数据之前或之后执行触发器逻辑 DELETE触发器: 在删除数据之前或之后执行触发器逻辑 额外补充举例:
- BEFORE INSERT触发器可以用于在插入数据之前验证数据完整性
- AFTER UPDATE触发器可以用于记录数据变更日志等
2.基础常用关键字
2.1MySQL触发器常用关键字详解说明表及对应示例
BEFORE: 表示在数据操作之前执行触发器逻辑
1.BEFORE:
-- 在插入数据之前执行的逻辑 CREATE TRIGGER `trigger_before_insert` BEFORE INSERT ON `mytable` FOR EACH ROW BEGIN END;
AFTER: 表示在数据操作之后执行触发器逻辑
2.AFTER:
-- 在更新数据之后执行的逻辑END; CREATE TRIGGER `trigger_after_update` AFTER UPDATE ON `mytable`FOR EACH ROWBEGIN
FOR EACH ROW: 表示针对每一行数据执行触发器逻辑
3.FOR EACH ROW:
-- 针对每一行删除操作执行的逻辑 CREATE TRIGGER `trigger_for_each_row` AFTER DELETE ON `mytable` FOR EACH ROW BEGIN END;
BEGIN和END: 用于定义触发器的逻辑代码块
4.BEGIN和END:
CREATE TRIGGER `trigger_multiple_statements` AFTER INSERT ON `mytable` FOR EACH ROW BEGIN DECLARE var INT; SET var = NEW.age + 10; IF (var > 50) THEN -- 逻辑语句1 ELSE -- 逻辑语句2 END IF; END;
NEW: 代表要插入、更新或删除的新数据引用。可以通过NEW来访问新值
5.NEW:
CREATE TRIGGER `trigger_new_value` BEFORE INSERT ON `mytable` FOR EACH ROW BEGIN SET NEW.name = UPPER(NEW.name); END;
OLD: 代表要更新或删除的旧数据引用。只能在UPDATE和DELETE触发器中使用
6.OLD:
CREATE TRIGGER `trigger_old_value` BEFORE UPDATE ON `mytable` FOR EACH ROW BEGIN IF (OLD.age < NEW.age) THEN -- 逻辑语句 END IF; END;
SET: 用于设置变量的值,可用于对NEW或OLD的字段进行赋值操作
7.SET:
CREATE TRIGGER `trigger_set_value` AFTER INSERT ON `mytable` FOR EACH ROW BEGIN SET @total = @total + NEW.quantity; END;
IF和THEN: 用于条件判断,控制触发器逻辑的执行流程
8.IF和THEN:
CREATE TRIGGER `trigger_if_then` BEFORE DELETE ON `mytable` FOR EACH ROW BEGIN IF (OLD.age > 30) THEN -- 逻辑语句1 ELSE -- 逻辑语句2 END IF; END;
INSERT、UPDATE、DELETE: 分别表示插入、更新和删除操作的关键字,可用于在相应类型的触发器中执行相应的逻辑[不在举例;往期已经详解]
3.如何定义触发器
语法格式:
-- 触发器逻辑 CREATE TRIGGER trigger_name{BEFORE | AFTER} {INSERT | UPDATE | DELETE} ON table_nameFOR EACH ROWBEGIN END;
触发器定义之选项参数详解说明表:
选项参数 详解说明 trigger_name: 触发器的名称,你可以根据需要自定 {BEFORE | AFTER}:
指定触发器在数据操作之前(BEFORE)或之后(AFTER)执行 {INSERT | UPDATE | DELETE}: 指定触发器在哪种类型的数据操作时触发,可以是插入数据(INSERT)、更新数据(UPDATE)或删除数据(DELETE) table_name:
指定触发器所属的表名 FOR EACH ROW: 确保触发器逻辑应用于每一行受影响的数据 BEGIN
和END:
定义了触发器逻辑的开始和结束位置,你可以在其中编写相应的代码来实现需要的业务逻辑
3.2如何创建和删除触发器
创建触发器语法格式:
CREATE TRIGGER trigger_name ...
删除触发器语法格式:
DROP TRIGGER IF EXISTS trigger_name;
3.3触发器的执行时机和对应条件
触发器的执行时机和对应条件表
BEFORE触发器: 在数据操作之前执行 AFTER触发器: 在数据操作之后执行 FOR EACH ROW: 对每一行数据执行触发器逻辑