Mysql中触发器使用详详详详详解~

01什么是触发器

触发器是与表有关的数据库对象,在对表进行insert/update/delete之前或之后,会触发并执行触发器中定义的SQL语句。触发器的这种特性可以协助应用在数据库端确保数据的完整性,记录日志,校验数据等。

简单的说,就是一张表发生了某件事(插入、删除、更新操作),然后自动触发了预先编写好的若干条SQL语句的执行;

02触发器创建语法

复制代码
CREATE tirgger trigger_name
before/after insert/update/delete on table_name
for each row
begin
tigger stmt;
end;
trigger_name:命名时最好使用table_time_event方式命令。
Table及表名,time有before、after,event有insert、update、delete, FOR EACH ROW

表示任何一条记录上的操作满足触发事件都会触发该触发器,也就是说触发器的触发频率是针对每一行数据触发一次.

03如何查看触发器

  • 查看数据库里有哪些触发器:

Show triggers;

  • 查看某个触发器的内容:

SHOW CREATE TRIGGER trigger_name;

然后把SQL Original Statement列的内容复制粘贴出来即可。

  • 删除触发器:

Drop trigger trigger_name;

  • 修改触发器:

无,先删除,再新建。

04NEW和OLD的使用

MySQL 中定义了 NEW 和 OLD加列名,用来表示触发器所在表中,触发了触发器的那一行数据,来引用触发器中发生变化的记录内容我们可以使用它们来获取被修改的对象和修改后的对象。

  • 在INSERT型触发器中,NEW用来表示将要(BEFORE)或已经(AFTER)插入的新数据;

  • 在UPDATE型触发器中,OLD用来表示将要或已经被修改的原数据,NEW用来表示将要或已经修改为的新数据;

  • 在DELETE型触发器中,OLD用来表示将要或已经被删除的原数据;

另外,OLD是只读的,而NEW则可以在触发器中使用 SET 赋值,这样不会再次触发触发器,造成循环调用

05触发器实例

实例1:给student表插入数据后记录其操作记录。

复制代码
create trigger student_after_insert after insert on student
for each row
begin
insert into student_history(userid,action,optime)
values(NEW.sno,'insert',now());
end

**实例2:删除学生表数据后同时删除成绩表中对应学生的成绩信息,保持了数据的完整性,一致性。**​​​​​​​

复制代码
create trigger student_after_delte AFTER DELETE on student
for each row
begin
DELETE from sc where sc.sno=old.sno;
end

实例3:修改成绩表成绩,如果修改成了负数则将其改为0,如果成绩大于100,则修改成100​​​​​​​

复制代码
create trigger sc_before_update before update on sc
for each row
begin
if new.score<0 then
set new.score=0;
elseif new.score>100 then
set new.score=100;
end if;
end

以上是我们较常见的**"Mysql中触发器使用详解** **"**的内容,希望对做这些工作的小伙伴有帮助~大家觉得文章有用的话一定要关注我们,每天来这里和小编一起学习涨薪技能哦。

相关推荐
百结2143 小时前
Mysql数据库操作
数据库·mysql·oracle
keep one's resolveY4 小时前
时区问题解决
数据库
Leinwin4 小时前
OpenClaw 多 Agent 协作框架的并发限制与企业化规避方案痛点直击
java·运维·数据库
qq_417695054 小时前
机器学习与人工智能
jvm·数据库·python
漫随流水4 小时前
旅游推荐系统(view.py)
前端·数据库·python·旅游
ego.iblacat4 小时前
MySQL 服务基础
数据库·mysql
测试_AI_一辰5 小时前
AI系统到底怎么测?一套六层测试框架(Agent案例)
人工智能·功能测试·需求分析·ai编程
Maverick066 小时前
Oracle Redo 日志操作手册
数据库·oracle
测试界的飘柔6 小时前
月薪 20k 的性能测试面试题大曝光,让你如何迅速拿下 offer!
自动化测试·软件测试·功能测试·面试·职场和发展·职场经验·找工作
攒了一袋星辰6 小时前
高并发强一致性顺序号生成系统 -- SequenceGenerator
java·数据库·mysql