我是靠谱客的博主 矮小方盒,最近开发中收集的这篇文章主要介绍关于mysql 触发器获取插入数据的问题,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

最近在搞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 触发器获取插入数据的问题所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(63)

评论列表共有 0 条评论

立即
投稿
返回
顶部