http://sqlfiddle.com/#!2/55130中的所有结构表
我们希望下次查询触发器:
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。
请告诉我,我的错误在哪里,怎样才是正确的?
发布于 2014-08-11 01:01:53
您的代码很难读懂。你是从哪里想到给扳机起这个名字的?
无论如何,您的代码是:
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)
ENDhttps://stackoverflow.com/questions/25234480
复制相似问题