繁体   English   中英

SQL查询触发器中的错误在哪里?

[英]SQL Where error in query trigger?

sqlfile中的所有结构表

我们想要下一个查询触发器:

CREATE TRIGGER `INSERT NEW ROW INTO MenuPosition` AFTER INSERT ON `Menu`
 FOR EACH ROW INSERT INTO MenuPosition 
SET 
MenuId=NEW.MenuId,
Position = 
(SELECT 1 + IFNULL((SELECT MAX(Position) FROM MenuPosition), 0))

但是,当我们在表Menu插入行时,会收到错误消息 You cann't specify target table 'MenuPosition' for update in FROM clause Update

请告诉我我的错误在哪里以及如何解决?

您的代码很难阅读。 您从哪儿想到了这样命名触发器的想法?

无论如何,您的代码是:

CREATE TRIGGER `INSERT NEW ROW INTO MenuPosition`
    AFTER INSERT ON `Menu`
    FOR EACH ROW
BEGIN
    INSERT INTO MenuPosition 
        SET MenuId = NEW.MenuId,
            Position = (SELECT 1 + IFNULL((SELECT MAX(Position) FROM MenuPosition), 0))
END

我个人不使用insert . . . set insert . . . set insert . . . set语法-这不是标准的。 因此,我想这是一个限制。 以下应该工作:

CREATE TRIGGER `INSERT NEW ROW INTO MenuPosition`
    AFTER INSERT ON `Menu`
    FOR EACH ROW
BEGIN
    INSERT INTO MenuPosition(MenuID, Position)
        SELECT NEW.MenuId, 1 + IFNULL( (SELECT MAX(Position) FROM MenuPosition), 0)
END

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM