认识MySQL触发器

简述触发器

MySQL触发器可以理解为是一个监听器或一个事件,一旦表中的数据有变化,就会触发一个事件,执行该事件内的逻辑代码。

  1. 可以激活触发器的操作:INSERT、UPDATE、DELETE(查询操作不会激活触发器)
  2. 可以设置激活触发器的时刻:before(在操作执行之前激活)、after(在操作执行之后激活)

创建或删除触发器

# 创建
create trigger trigger_name before/after insert/update/delete on table_name for each row sql语句

例如:
# 每次在test表插入数据前 都往test2表内插入一条数据(名字:小明,性别:男,年龄:18)
create trigger test_trigger before insert on test for each row insert into test2 values(null, '小明', '男', 18);

# 删除
drop trigger trigger_name

图解创建语句

认识MySQL触发器

NEW与OLD的使用

NEW.col_name是获取当前触发器要操作的表内列的新值,比如insert会往表的列中插入新值,update会更新新值到表的列中。这些新值都是可以在触发器中使用的,但是得加上NEW标明要使用这个值。

OLD.col_name同理,触发器操作列中的旧值。

  1. INSERT操作只能使用NEW,不能使用OLD。
  2. UPDATE操作在before情况下能使用NEW和OLD,在after情况下只能使用NEW。
  3. DELETE操作只能使用OLD,不能使用NEW。

INSERT

如果插入的学生的年龄小于18 则年龄为18

create trigger student_insert_trigger
before/after insert on student
for each row
SET NEW.age = IF(NEW.age < 18, 18, NEW.age);

UPDATE

如果在更新前 新年龄小于18,则使用旧年龄更新进去(值不变),否则使用新年龄更新进去。

create trigger student_update_before_trigger
before update on student
for each row
SET NEW.age = IF(NEW.age < 18, OLD.age, NEW.age);

如果在更新后 新年龄大于100,则新年龄强制等于100。

create trigger student_update_after_trigger
before update on student
for each row
SET NEW.age = IF(NEW.age > 100, 100, NEW.age);

DELETE

删除一个学生,学生对应的班级人数减一。

create trigger student_delete_trigger
before delete on student
for each row
update grade set count = count - 1 where grade_id = old.grade_id

博主的博客网站:https://www.lollycode.com
觉得不错,点个赞再走呗!

上一篇:VSCode修改万能提示键


下一篇:SpringBoot使用多实例QUARTZ出现重复执行问题