触发器

使用触发器可以定制用户对表进行【增、删、改】操作时前后的行为

注意:没有查询

一 、创建触发器

触发器基础语法:

# 插入前
CREATE TRIGGER tri_before_insert_tb1 BEFORE INSERT ON tb1 FOR EACH ROW
BEGIN
...
END # 插入后
CREATE TRIGGER tri_after_insert_tb1 AFTER INSERT ON tb1 FOR EACH ROW
BEGIN
...
END # 删除前
CREATE TRIGGER tri_before_delete_tb1 BEFORE DELETE ON tb1 FOR EACH ROW
BEGIN
...
END # 删除后
CREATE TRIGGER tri_after_delete_tb1 AFTER DELETE ON tb1 FOR EACH ROW
BEGIN
...
END # 更新前
CREATE TRIGGER tri_before_update_tb1 BEFORE UPDATE ON tb1 FOR EACH ROW
BEGIN
...
END # 更新后
CREATE TRIGGER tri_after_update_tb1 AFTER UPDATE ON tb1 FOR EACH ROW
BEGIN
...
END

触发器举例应用:

#准备表
CREATE TABLE cmd (
id INT PRIMARY KEY auto_increment,
USER CHAR (32),
priv CHAR (10),
cmd CHAR (64),
sub_time datetime, #提交时间
success enum ('yes', 'no') #0代表执行失败
); CREATE TABLE errlog (
id INT PRIMARY KEY auto_increment,
err_cmd CHAR (64),
err_time datetime
); #创建触发器
delimiter //
CREATE TRIGGER tri_after_insert_cmd AFTER INSERT ON cmd FOR EACH ROW
BEGIN
IF NEW.success = 'no' THEN #等值判断只有一个等号
INSERT INTO errlog(err_cmd, err_time) VALUES(NEW.cmd, NEW.sub_time) ; #必须加分号
END IF ; #必须加分号
END//
delimiter ; #往表cmd中插入记录,触发触发器,根据IF的条件决定是否插入错误日志
INSERT INTO cmd (
USER,
priv,
cmd,
sub_time,
success
)
VALUES
('duoduo','0755','ls -l /etc',NOW(),'yes'),
('duoduo','0755','cat /etc/passwd',NOW(),'no'),
('duoduo','0755','useradd xxx',NOW(),'no'),
('duoduo','0755','ps aux',NOW(),'yes'); #查询错误日志,发现有两条
mysql> select * from errlog;
+----+-----------------+---------------------+
| id | err_cmd | err_time |
+----+-----------------+---------------------+
| 1 | cat /etc/passwd | 2017-09-14 22:18:48 |
| 2 | useradd xxx | 2017-09-14 22:18:48 |
+----+-----------------+---------------------+
2 rows in set (0.00 sec)

特别的:NEW表示即将插入的数据行,OLD表示即将删除的数据行。

二、使用触发器

触发器无法由用户直接调用,而知由于对表的【增/删/改】操作被动引发的。

三、 删除触发器

删除语法:

drop trigger tri_after_insert_cmd;

附:Mysql 基本用法

一、【Mysql 基本用法之视图

二、【Mysql 基本用法之触发器

三、【Mysql 基本用法之事务

四、【Mysql 基本用法之存储过程

五、【Mysql 基本用法之函数

六、【Mysql 基本用法之流程控制

最新文章

  1. 吐槽!important专用博文
  2. HTML5移动Web开发(六)——定义一个内容策略
  3. 【Android】开源项目UI控件分类汇总之ProgressBar
  4. C# 天气预报
  5. My集合框架第三弹 AVL树
  6. cetnos 6.7 安装 oracle 11详解
  7. mysql的存储引擎如何选择
  8. 用py2exe将python文件转换成exe可执行程序
  9. Android持续集成之Jenkins 部署
  10. ArcGIS API for JavaScript 与 npm 之例子运行
  11. Maven导入项目时报错 Could not calculate build plan
  12. Linux安装Tomcat-Nginx-FastDFS-Redis-Solr-集群——【第九集-补充-之安装iptables】
  13. Charles在Mac、iPhone、Android上抓http/https协议的包
  14. Squid实现正向代理及访问控制--技术流ken
  15. 使用redis实现生产者消费者模式
  16. Tree Restoration Gym - 101755F (并查集)
  17. Mysql注入绕过姿势
  18. Ubunt 安装mysql
  19. 【BZOJ4099】Trapped in the Haybales Gold STL
  20. Bitmap 位图

热门文章

  1. linux 文件管理操作入门
  2. Creating Node.js Command Line Utilities to Improve Your Workflow
  3. css重难点笔记
  4. ReportViewer的使用总结
  5. openstack--8--控制节点部署Dashboard
  6. Spring 框架的历史
  7. day 3 大纲笔记
  8. 我发起了一个 .Net Core 平台上的 开源项目 ShadowDomain 用于 热更新
  9. ML(7)——支持向量机1(构建支持向量机)
  10. java 标准输入输出System.in与System.out