SQL查询中的错误触发器?

时间:2014-08-11 00:54:01

标签: mysql sql

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

请告诉我我的错误在哪里怎么样?

1 个答案:

答案 0 :(得分:0)

您的代码很难阅读。你在哪里得到了这样命名的触发器的想法?

无论如何,您的代码是:

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