触发器主要用于在插入数据前后
、修改数据前后
、删除数据前后
的时候执行的SQL操作
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
-- 查看触发器
SHOW TRIGGERS;
-- 查看information_schema 中的triggers表
DESC TRIGGERS
语法:drop trigger [if exists] 触发器名称
DROP TRIGGER IF EXISTS before_insert_log;
DROP TRIGGER IF EXISTS after_insert_log;
1.触发器存在于MYSQL服务器端,需要占用数据内存,对于内存优化有冲突
2.触发器中不能显式或者隐式的使用事务
,例如start transaction、commit或者rollback
3.当其中的任意一个触发器出现问题的时候
,不会继续执行下一个触发器
,添加后的数据是不能回滚的
!
1.使用触发器的时候需要注意,如果只是简单的日志记录不必使用触发器
2.触发器的创建需要delimiter //还有需要begin和end
3.对于触发器注意的事项要加以小心
4.对于触发器一共有6种:after before*insert update delete
以上纯属个人见解,如有问题请联系本人!