Mysql触发器中执行一个外部程序

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

Mysql触发器中执行一个外部程序

昨天接到一个需求,要求在mysql的触发器中执行一个外部程序。

一开始没有什么头绪,后来发现嘿嘿。

/projects/project.php?id=211

有个叫mysqludf的一个东西,用起来还不错。

/lib_mysqludf_sys/index.php

不过这个东西仅仅在linux下试了试,效果还行。

步骤如下:

一、解压附件的压缩包之后

如果不想自己编译的话,把lib_mysqludf_sys.so文件放到mysql的

lib/mysql/plugin/

目录下。

二、执行chcon -t texrel_shlib_t

mysql/lib/mysql/plugin/lib_mysqludf_sys.so

三、创建函数

DROP FUNCTION IF EXISTS lib_mysqludf_sys_info;

DROP FUNCTION IF EXISTS sys_get;

DROP FUNCTION IF EXISTS sys_set;

DROP FUNCTION IF EXISTS sys_exec;

DROP FUNCTION IF EXISTS sys_eval;

CREATE FUNCTION lib_mysqludf_sys_info RETURNS string SONAME 'lib_mysqludf_sys.so';

CREATE FUNCTION sys_get RETURNS string SONAME

'lib_mysqludf_sys.so';

CREATE FUNCTION sys_set RETURNS int SONAME

'lib_mysqludf_sys.so';

CREATE FUNCTION sys_exec RETURNS int SONAME

'lib_mysqludf_sys.so';

CREATE FUNCTION sys_eval RETURNS string SONAME

'lib_mysqludf_sys.so';

四、测试

1、准备sh文件

在linux系统中执行下面的命令

su mysql

mkdir /mysqlUDFtest

cd mysqlUDFtest

vi test.sh

#/bin/sh

date > testlog.txt

chmod +x ./test.sh

2、准备数据库表和触发器

选择一个数据库执行如下命令:

CREATE TABLE test1(a1 INT) type=InnoDB;

CREATE TABLE test2(a2 INT) type=InnoDB;

CREATE TABLE test3(a3 INT NOT NULL AUTO_INCREMENT PRIMARY KEY) type=InnoDB;

CREATE TABLE test4(

a4 INT NOT NULL AUTO_INCREMENT PRIMARY KEY,

b4 INT DEFAULT 0

) type=InnoDB;

DELIMITER |

DROP TRIGGER /*!50032 IF EXISTS */ `test`.`testref`|

create trigger `test`.`testref` BEFORE INSERT on `test`.`test1` for each row BEGIN

DECLARE done INT DEFAULT 999;

INSERT INTO test2 SET a2 = NEW.a1;

DELETE FROM test3 WHERE a3 = NEW.a1;

UPDATE test4 SET b4 = b4 + 1 WHERE a4 = NEW.a1;

set done = sys_exec("/mysqlUDFtest/test.sh");

IF done != 0 then

INSERT INTO `<>22.t3` VALUES (a,b);

end if;

END;

|

DELIMITER ;

3、向test1表中插入一条数据

向test1表中插入一条数据后,检查linux系统中的/mysqlUDFtest目录下testlog

里的时间是否跟数据插入时间一致。

相关文档
最新文档