欢迎各位彦祖与热巴畅游本人专栏与博客
你的三连是我最大的动力
以下图片仅代表专栏特色 [点击箭头指向的专栏名即可闪现]
专栏跑道一
➡️网络空间安全——全栈前沿技术持续深入学习
专栏跑道二
➡️ 24 Network Security -LJS
专栏跑道三
➡️ MYSQL REDIS Advance operation
专栏跑道四
➡️HCIP;H3C-SE;CCIP——LJS[华为、华三、思科高级网络]
专栏跑道五
➡️RHCE-LJS[Linux高端骚操作实战篇]
专栏跑道六
➡️数据结构与算法[考研+实际工作应用+C程序设计]
专栏跑道七
➡️RHCSA-LJS[Linux初级及进阶骚技能]
上节回顾
1.MySQL触发器的使用场景
1.1. 数据完整性约束
插入触发器
-- 创建一个名为 `person` 的表 CREATE TABLE `person` ( `id` INT(11) NOT NULL AUTO_INCREMENT, -- 定义 id 列为整型,非空,自增 `name` VARCHAR(100) NOT NULL, -- 定义 name 列为可变字符型,最大长度100,非空 `age` INT(11) NOT NULL, -- 定义 age 列为整型,非空 PRIMARY KEY (`id`) -- 设置 id 列为主键 ); -- 更改分隔符,以便定义触发器 DELIMITER // -- 创建一个名为 `trigger_insert_mytable` 的触发器 CREATE TRIGGER `trigger_insert_mytable` BEFORE INSERT ON `person` -- 在 `person` 表插入数据之前触发 FOR EACH ROW -- 对每一行插入的数据执行触发器逻辑 BEGIN -- 触发器逻辑部分,可以在此处编写需要执行的代码 -- 示例:将插入的数据的 name 字段转换为大写 SET NEW.name = UPPER(NEW.name); -- 使用 UPPER 函数将新插入的 name 字段转换为全大写 END // -- 结束触发器逻辑 DELIMITER ; -- 恢复默认分隔符
效果图
编辑
编辑
更新触发器[效果图略]:
-- 创建一个名为 trigger_name 的触发器 CREATE TRIGGER trigger_name BEFORE UPDATE ON table_name -- 在 table_name 表进行更新操作之前触发 FOR EACH ROW -- 对于每一行被更新的记录都会执行触发器逻辑 BEGIN -- 触发器逻辑部分 -- 这里可以添加你需要执行的操作,例如验证数据、记录日志等 END;
删除触发器[效果图略]:
-- 创建一个名为 trigger_name 的触发器 CREATE TRIGGER trigger_name BEFORE DELETE ON table_name -- 在 table_name 表进行删除操作之前触发 FOR EACH ROW -- 对于每一行被删除的记录都会执行触发器逻辑 BEGIN -- 触发器逻辑部分 -- 可以在这里添加代码,比如记录日志、检查条件等 END;
2. 数据变更日志的记录与追踪
2.1如何具体创建person的日志表
-- 创建一个名为 person_log 的表,用于记录人员变更日志 CREATE TABLE person_log ( id INT(11) NOT NULL AUTO_INCREMENT, -- 日志记录的唯一标识,自动递增 event_type VARCHAR(50) NOT NULL, -- 事件类型,例如 INSERT、UPDATE 等 event_time DATETIME NOT NULL, -- 事件发生的时间 person_id INT(11) NOT NULL, -- 相关人员的 ID person_name VARCHAR(100) NOT NULL, -- 相关人员的姓名 person_age INT(11) NOT NULL, -- 相关人员的年龄 PRIMARY KEY (id) -- 将 id 列设置为主键 ); -- 创建一个触发器,当在 person 表中插入新记录后执行 CREATE TRIGGER trigger_insert_person AFTER INSERT ON person -- 在 person 表插入操作后触发 FOR EACH ROW -- 每插入一行都会执行触发器 BEGIN -- 记录变更日志,将插入事件的信息写入 person_log 表 INSERT INTO person_log (event_type, event_time, person_id, person_name, person_age) VALUES ('INSERT', NOW(), NEW.id, NEW.name, NEW.age); -- 使用 NEW 关键字获取新插入行的数据 END;
效果图:
编辑
3. 触发器与存储过程的对比与选择
触发器与存储过程的对比与选择详解说明表
触发器 |
|
|
|
|
|
|
|
|
存储过程 |
|
|
|
|
|
|
|
|
|
|
|
选择 |
|
|
|
|
4.触发器的性能和注意事项
触发器的性能和注意事项详解说明表
性能影响 |
|
死锁风险 |
|
触发器顺序 |
|
触发器的影响范围 |
|
权限 |
|
调试和测试 |
|