查询触发器错误



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语法——它不是标准的。所以,我想这是一个限制。下面的代码应该可以工作:

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

最新更新