概述
最近在搞mysql的触发器,想通过数据库中的一个表格的数据插入,触发一个事件,调用一个shell程序,并把刚插入的数据内容作为参数传入shell脚本中。
我在网上查了很多关于如何在触发器中获取刚插入的数据内容,网上绝大多数都是写mysql 有两个临时表INSERTED 和 DELETED表,然后通过类似如下操作获取:
CREATE TRIGGER tgr_tablea_insert AFTER //触发器名字 动作在插入数据之后
ON alertinfo //监听哪个表之后触发
FOR INSERT //监听的表的inster操作
AS //sql语句
DECLARE @RuleID CHAR(32),@ImageID CHAR(32),@CameraID CHAR(32), //定义变量
@PersonID INT(10),@Similarity FLOAT ,@AlertTime DATETIME;
SELECT @RuleID =RuleID,@ImageID=ImageID,
@CameraID=CameraID,@PersonID=PersonID,
@Similarity=Similarity,@AlertTime=AlertTime FROM inserted; //把inster的值赋给这些变量
INSERT INTO `attendancealert` (`RuleID`,`ImageID`,`CameraID`,`PersonID`,`Similarity`,`AlertTime`) //最后再插进去
VALUES(@RuleID,@ImageID,@CameraID,@PersonID,@Similarity,@AlertTime); chak
这个是一个将插入数据获取后再插入另一张表,但验证结果上述方式是错的。应该是各种复制粘贴未经测试的结果,也许上段代码适用于mssql但它肯定不能用于mysql。
因为 mysql没有mssql中的INSERTED 和 DELETED表,有的只是NEW和OLD两个记录对象,只能存储一条记录,数据是通过new.columnName方式获取。下面是我经过测试后的结果
delimiter ||
create trigger test after insert on [数据库名].[表名] for each row
begin
declare zz_name varchar(225);
declare zz_id int;
declare done int;
set zz_name = new.name;
set zz_id = new.id;
set done = sys_exec(concat('echo id=',zz_id,' name=',zz_name,' >> /tmp/test.txt')); //这里需要先安装lib_mysqludf_sys.so ,执行将字符串添加到文本文件/tmp/test.txt中
end
||
最后
以上就是矮小方盒为你收集整理的关于mysql 触发器获取插入数据的问题的全部内容,希望文章能够帮你解决关于mysql 触发器获取插入数据的问题所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复