欢迎各位彦祖与热巴畅游本人专栏与博客
你的三连是我最大的动力
以下图片仅代表专栏特色 [点击箭头指向的专栏名即可闪现]
专栏跑道一
➡️网络空间安全——全栈前沿技术持续深入学习
专栏跑道二
➡️ 24 Network Security -LJS
专栏跑道三
➡️ MYSQL REDIS Advance operation
专栏跑道四
➡️HCIP;H3C-SE;CCIP——LJS[华为、华三、思科高级网络]
专栏跑道五
➡️RHCE-LJS[Linux高端骚操作实战篇]
专栏跑道六
➡️数据结构与算法[考研+实际工作应用+C程序设计]
专栏跑道七
➡️RHCSA-LJS[Linux初级及进阶骚技能]
上节回顾
1.MySQL触发器详解
简介
- 数据库触发器是一种在特定数据操作(如插入、更新或删除)发生时自动执行的动作。本文将介绍MySQL触发器的基础知识和使用方法。
1.1MySQL触发器基础
触发器分类
MySql执行时机和数据操作类型分类表
按执行时机分类 | BEFORE触发器: | 在数据操作之前执行触发器逻辑 |
AFTER触发器: | 在数据操作之后执行触发器逻辑 | |
按数据操作类型分类 | INSERT触发器: | 在插入数据之前或之后执行触发器逻辑 |
UPDATE触发器: | 在更新数据之前或之后执行触发器逻辑 | |
DELETE触发器: | 在删除数据之前或之后执行触发器逻辑 |
额外补充举例:
- BEFORE INSERT触发器可以用于在插入数据之前验证数据完整性
- AFTER UPDATE触发器可以用于记录数据变更日志等
2.基础常用关键字
2.1MySQL触发器常用关键字详解说明表及对应示例[以下为SQL语句,新人第一次转移博客,比较赶]
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: | 对每一行数据执行触发器逻辑 |