gpt4 book ai didi

MySQL TRIGGER ON INSERT 问题

转载 作者:行者123 更新时间:2023-11-29 21:59:36 25 4
gpt4 key购买 nike

我对 MySQL 触发器感到抓狂。 MySQL 说代码中有错误,但我不知道问题出在哪里。

这是触发器

CREATE TRIGGER UPDATE_COUNTRY

AFTER INSERT

ON `dog`FOR EACH ROW

BEGIN

IF (NEW.export=1)
THEN
IF (NEW.year > (SELECT MAX(`updated_year`) FROM `dog` WHERE `code`=NEW.origin))
THEN
UPDATE `dog` SET `updated_year`= NEW.year, `updated_month`= NEW.month WHERE `code`= NEW.origin;

ELSEIF (NEW.year = (SELECT MAX(`updated_year`) FROM `dog` WHERE `code`=NEW.origine)
AND NEW.month > (SELECT MAX(`updated_month`) FROM `dog` WHERE `code`=NEW.origine AND `updated_year`=NEW.year))
THEN UPDATE `dog` SET `updated_month`=NEW.month WHERE `code`=NEW.origin;
ELSE
RETURN NEW;
END IF;

END IF;
RETURN NEW;
END;

我的 SQL 说

您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,了解在第 13 行 '' 附近使用的正确语法

谢谢大家!

最佳答案

您的触发器是:

AFTER INSERT ON `dog`FOR EACH ROW

你的第 13 行是

UPDATE `dog` SET `updated_year`= NEW.year, `updated_month`= NEW.month WHERE `code`= NEW.origin;

这有点糟糕,但是您无法在当前插入/更新/删除数据的同一个表上使用触发器进行更新/插入/删除,因为该表已锁定。

这是 MySQL 的限制(是的,并不是所有 SGDB 实际上都有这个限制......(

如果您想更新“dog”表,则需要采用不同的方法。您可以使用存储过程来执行插入和更新。

关于MySQL TRIGGER ON INSERT 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32785219/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com