使用方法:NEW.columnName (columnName为相应数据表某一列名)
1、案例
-- 案例一 drop TRIGGER if EXISTS TRIGGER_test2; delimiter $$ CREATE TRIGGER TRIGGER_test2 after INSERT on users FOR EACH ROW BEGIN INSERT INTO user_log(content,create_time) VALUES(CONCAT('添加的用户信息为:',NEW.user_name,' 性别为:',NEW.sex ),NOW()); end $$ delimiter ; INSERT INTO users(user_name,sex) VALUES('xiaohemaio','男'); -- 案例二 drop TRIGGER if EXISTS TRIGGER_test3; delimiter $$ CREATE TRIGGER TRIGGER_test3 BEFORE UPDATE on users FOR EACH ROW BEGIN INSERT INTO user_log(content,create_time) VALUES(CONCAT('将:',OLD.user_name,' 修改为:',NEW.user_name ),NOW()); end $$ delimiter ; update users set user_name='迪丽热巴' WHERE id=4; -- 案例三 drop TRIGGER if EXISTS TRIGGER_test4; delimiter $$ CREATE TRIGGER TRIGGER_test4 BEFORE DELETE on users FOR EACH ROW BEGIN INSERT INTO user_log(content,create_time) VALUES(CONCAT('将id为:',OLD.user_name,' 已删除' ),NOW()); end $$ delimiter ; DELETE FROM users WHERE id=4;
四、其他操作
-- 查看触发器 SHOW TRIGGERS; -- 删除触发器 drop TRIGGER if EXISTS 触发器名;
五、注意事项
1、触发器中不能对本表进行insert,update,delete操作,以免递归循环触发
2、尽量少使用 触发器,假设触发器触发每次执行1s,insert table 500条数据,那么就需要触发500次触发器,光是触发器执行的时间就花费了500s,而insert 500条数据一共是1s,那么这个insert 的效率就非常低了。
3、触发器是针对每一行的数据,对增删改非常频繁的表上切记不要使用触发器,因为非常消耗资源。
补充:验证触发器
向用户表users插入数据。
mysql> INSERT INTO users (userName, password, name, nickName, sex, email, isManager) VALUE ('itbilu', 'e10adc3949ba59abbe56e057f20f883e', 'IT笔录', 'itbilu', 1, 'cn.liuht@gmail.com', 0);
users原来没有数据,刚插入的数据userId为1。向用户表角色表userRoles插入数据,使触发器触发:
mysql> INSERT INTO userRoles (userId, roleId) VALUE (1, 1);
刚才插入的数据已经使触发器触发,查看结果如下:
mysql> select isManager from users; +-----------+ | isManager | +-----------+ | 1 | +-----------+
总结
到此这篇关于MySql数据库触发器使用的文章就介绍到这了,更多相关MySql触发器使用内容请搜索
更多相关Mysql内容来自木庄网络博客
标签:Mysql
相关阅读 >>
详解mysql插入数据成功但是报[err] 1055错误如何解决
mysql中优化和修复数据库工具mysqlcheck详细介绍
更多相关阅读请进入《mysql》频道 >>

数据库系统概念 第6版
本书主要讲述了数据模型、基于对象的数据库和XML、数据存储和查询、事务管理、体系结构等方面的内容。