Mysql 说:#1422 - 存储函数或触发器中不允许显式或隐式提交
Posted
技术标签:
【中文标题】Mysql 说:#1422 - 存储函数或触发器中不允许显式或隐式提交【英文标题】:Mysql said: #1422 - Explicit or implicit commit is not allowed in stored function or trigger 【发布时间】:2014-11-28 22:50:43 【问题描述】:在下面的代码中,我正在尝试创建一个触发器,如果 Web 应用程序的用户没有上传带有属于“incidentreport”表的表单的图像,则该触发器会插入“incidentimg”表 ID 以及图像路径,我只收到错误“mysql 说:#1422 - 存储函数或触发器中不允许显式或隐式提交”
DROP TRIGGER IF EXISTS `insertImage`;
CREATE TRIGGER `insertImage` AFTER INSERT ON `incidentreport`
FOR EACH ROW
BEGIN
IF(SELECT incidentimg.incidentImgId FROM incidentimg
LEFT JOIN incidentreport ON incidentimg.imgs_incidentReportId = incidentreport.incidentReportId
WHERE incidentimg.incidentImgId IS NULL)
THEN INSERT INTO incidentimg(incidentImgId, imgUrl)values(NEW.incidentReportId, 'images/no-image.png');
END IF;
END
;
这里是正在使用的表格
谁能帮助我解决这个问题
【问题讨论】:
【参考方案1】:我终于让代码工作了。现在代码将检查“incidentimg”表是否具有“incidentreport”表具有的所有“incidentReportId”,如果没有,则将插入“incidentreport”表中最后插入的 id 以及默认图像路径插入后进入“事件”表。
CREATE TRIGGER insertImage AFTER INSERT ON incidentreport
FOR EACH ROW
BEGIN
IF(SELECT incidentreport.incidentReportId
FROM incidentreport
LEFT JOIN incidentimg ON incidentreport.incidentReportId = incidentimg.imgs_incidentReportId
WHERE incidentimg.imgs_incidentReportId IS NULL)
THEN INSERT INTO incidentimg(imgs_incidentReportId, imgUrl) VALUES(NEW.incidentReportId, 'images/no-image.png');
END IF;
END
【讨论】:
【参考方案2】:我不太确定,但我猜这可能是因为IF .. THEN
条件INSERT
。尝试使用EXISTS
修改您的INSERT
语句
DROP TRIGGER IF EXISTS `insertImage`;
CREATE TRIGGER `insertImage` AFTER INSERT ON `incidentreport`
FOR EACH ROW
BEGIN
INSERT INTO incidentimg(incidentImgId, imgUrl)
SELECT NEW.incidentReportId, 'images/no-image.png'
FROM DUAL WHERE EXISTS (
SELECT 1 FROM incidentimg
LEFT JOIN incidentreport
ON incidentimg.imgs_incidentReportId = incidentreport.incidentReportId
WHERE incidentimg.incidentImgId IS NULL
)
END;
【讨论】:
您是否仍然遇到同样的错误?我相信这是 SELECT 语句;你能解释一下你想用那个 SELECT 语句做什么吗? 在网络应用程序中,用户应该完成一个步骤向导,其中表单的第一部分属于“事件报告”报告,下一部分用于上传图像(事件表),但是用户不必上传图片。因此,使用 select 语句,我试图通过检查该条目是否为空来检查在填充“incidentreport”表之后是否有任何数据插入到“incidentimg”表中......希望这很清楚@Rahul以上是关于Mysql 说:#1422 - 存储函数或触发器中不允许显式或隐式提交的主要内容,如果未能解决你的问题,请参考以下文章
MySQL 说:#1336 - 存储函数或触发器中不允许使用动态 SQL
mysql视图,存储过程,函数,事务,触发器,以及动态执行sql
MySql 错误:无法更新存储函数/触发器中的表,因为它已被调用此存储函数/触发器的语句使用
如何在 MYSQL 中编写可以从触发器和存储函数调用的信号函数?