MySQL之触发器

1.简介

触发器主要用于在插入数据前后修改数据前后删除数据前后的时候执行的SQL操作

2.创建触发器

在这里插入图片描述
注意:当前的触发器只能用于在永久表种存在,不能用在临时表

当前的mytest表
在这里插入图片描述
当前的my_log日志表

在这里插入图片描述
创建添加数据前和添加数据后的触发器

DELIMITER //
CREATE TRIGGER before_insert_log  BEFORE INSERT
ON mytest FOR EACH ROW 
BEGIN 
    INSERT INTO my_log(note)
    VALUES(CONCAT('before insert 当前添加的数据为【id:',new.id,',name:',new.name,',money:',new.money,'】'));
END //
DELIMITER ;
-- 创建在添加后触发的触发器
DELIMITER //
CREATE TRIGGER after_insert_log  AFTER INSERT
ON mytest FOR EACH ROW 
BEGIN 
    INSERT INTO my_log(note)
    VALUES(CONCAT('after insert 当前添加的数据为【id:',new.id,',name:',new.name,',money:',new.money,'】'));
END //
DELIMITER ;

开始添加两条数据

-- 开始添加数据
INSERT INTO mytest(NAME,money)
VALUES('李四',200);
INSERT INTO mytest(NAME,money)
VALUES('张三',100);

结果:
在这里插入图片描述
在这里插入图片描述

发现:当前使用after insert 的时候id是明确的,而before中的id始终为0

3.查看触发器

-- 查看触发器 
SHOW TRIGGERS;
-- 查看information_schema 中的triggers表
DESC TRIGGERS

4.删除触发器

语法:drop trigger [if exists] 触发器名称

DROP TRIGGER IF EXISTS before_insert_log;
DROP TRIGGER IF EXISTS after_insert_log;

5.使用触发器需要注意的事项

1.触发器存在于MYSQL服务器端,需要占用数据内存,对于内存优化有冲突

2.触发器中不能显式或者隐式的使用事务,例如start transaction、commit或者rollback

3.当其中的任意一个触发器出现问题的时候不会继续执行下一个触发器添加后的数据是不能回滚的

6.总结

1.使用触发器的时候需要注意,如果只是简单的日志记录不必使用触发器

2.触发器的创建需要delimiter //还有需要begin和end

3.对于触发器注意的事项要加以小心

4.对于触发器一共有6种:after before*insert update delete

以上纯属个人见解,如有问题请联系本人!

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值