需要MySQl触发器帮助

时间:2010-11-30 12:30:16

标签: mysql triggers

使用MySQL 5.1.36,我试图编写触发器,将临时表从“临时”数据库中删除。

CREATE DEFINER=`root`@`localhost` TRIGGER 
`jobq`.`DropScratch` 
BEFORE DELETE ON jobq.jobq FOR EACH ROW
BEGIN
 DECLARE tblname VARCHAR(128);
 set tblname=concat('scratch.',OLD.jobname);
 DROP TABLE IF EXISTS tblname;
END;

我总是收到错误:

Explicit or implicit commit is not allowed in stored function or trigger.

我可以以某种方式克服这个限制吗?

事先谢谢你 阿尔曼

1 个答案:

答案 0 :(得分:1)

这里的主要问题是不允许您在触发器中删除表。这是错误消息在不允许“隐式提交”时得到的内容。 drop table执行隐式提交。

因此除了触发器之外,您还需要找出一种不同的方法来做到这一点。一种方法是设置一个cron作业,它将information_schema.tables中的数据与jobq表进行比较,以查找可以删除的临时数据库中的表,然后删除它们。

我还应该指出,您尝试动态创建drop table语句的方式不起作用。这将删除一个名为字面意思“tblname”的表,而不是“scratch.jobname”。如果要动态删除表,则需要使用单独的脚本语言(如python,perl,shell等)构建drop table语句。

祝你好运!