#准备表
命令表
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代表执行失败
);

priv 字段是权限

sucess enum 是命令执行成功与否

另外一张命令错误表 记录命令出错信息

err_cmd 命令命

err_time 命令的提交时间

CREATE TABLE errlog (
id INT PRIMARY KEY auto_increment,
err_cmd CHAR (64),
err_time datetime
);

这两张表都有关系的

插入记录到cmd表 如果插入的命令记录有错误 这条错误的记录会插入到errlog表里

在插入完之后做触发器,判断这条命令是否错误 插完之后sueess字段如果为no,意味着这条命令记录是错误的,就把错误记录写入到,

errlog表里

#创建触发器
触发器提供两个对象 1.NEW 代表新增进来的记录 2. old 代表之前老的记录 insert 都是新的记录 都用new对象
alter 是用到老记录和新纪录 所以修改时候涉及用到old、new对象 new对象下面有相应的属性 new.id 就是调新建记录的id new.user 调新增记录的user
new.success
delimiter //  # 设置mysql结束语句符号为//
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) ; #必须加分号,这里加;也不会中断mysql语句
END IF ; #必须加分号
END// # 结束触发器语句
delimiter ; # 把mysql 结束语句符号 还原为;



上面的中间代码的语法类似于shell

判断这个new.success字段新增进来的记录是否为no 如果为no执行then 下面的代码

if new.success ='no' then

  执行的代码

end if ; 结束语句

mysql 结束语句符号都是;
delimiter 作用是声明sql语句的结束符号 用任意符号都可以

delimiter //  声明mysql结束语句符号 用// 不用;

#往表cmd中插入记录,触发触发器,根据IF的条件决定是否插入错误日志
INSERT INTO cmd (
USER,
priv,
cmd,
sub_time,
success
)
VALUES
('egon','','ls -l /etc',NOW(),'yes'),
('egon','','cat /etc/passwd',NOW(),'no'),
('egon','','useradd xxx',NOW(),'no'),
('egon','','ps aux',NOW(),'yes'); 插入后触发触发器
#查询错误日志,发现有两条
mysql> select * from errlog;
+----+-----------------+---------------------+
| id | err_cmd | err_time |
+----+-----------------+---------------------+
| 1 | cat /etc/passwd | 2018-11-12 05:28:46 |
| 2 | useradd xxx | 2018-11-12 05:28:46 |
+----+-----------------+---------------------+
2 rows in set (0.00 sec)

												

最新文章

  1. j2ee学习资料收集
  2. 一个input标签搞定含内外描边及阴影的按钮~
  3. Unknown class in Interface Builder file 解决方案
  4. 【转】Spring Quartz的原理
  5. PHP 设计模式 笔记与总结(11)观察者模式
  6. devexpress13学习系列(四)PDFViewer(4)
  7. Ext vtype
  8. Ajax-jQuery实现
  9. UM_第三方登录
  10. 【HDU 3483】 A Very Simple Problem (二项式展开+矩阵加速)
  11. 【hanoi】hanoi移动次数和移动步骤
  12. 免费开源的boostrap模板
  13. vue-router的两种模式的区别
  14. SSH反向连接及Autossh
  15. Mysql利用存储过程插入400W条数据
  16. GIL全局解释器锁
  17. Scrapy实现腾讯招聘网信息爬取【Python】
  18. Microsoft SQL Server 17导出xlsx文件时报错:The 'Microsoft.ACE.OLEDB.12.0' provider is not registered on the local machine. (System.Data)
  19. 【HDOJ1531】【差分约束+添加超级源点】
  20. Github上关于iOS的各种开源项目集合2(强烈建议大家收藏,查看,总有一款你需要)

热门文章

  1. Xshell 5 免费版本安装过程
  2. .net写入文本到本地
  3. 【Linux基础学习】Ubuntu 常用命令大全
  4. 【mac】php7.1 安装swoole 扩展
  5. css3整理--text-overflow
  6. JUnit(>4.0)@BeforeClass、@Before、@Test、@After、@AfterClass、@Ignore
  7. C语言程序设计--宏和预处理
  8. H3C系列之三层交换机文件管理
  9. 在eclipse中编辑linux上的项目
  10. "will you marry me" vs "would you marry me"