mysql - SQL查询触发器哪里出错?

标签 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 中插入行时,我们会收到错误 您无法在 FROM 子句 Update 中指定要更新的目标表“MenuPosition”

请告诉我我的错误在哪里以及如何正确?

最佳答案

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

无论如何,您的代码是:

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

关于mysql - SQL查询触发器哪里出错?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25234480/

相关文章:

php - PHP中的SQL解析器?

sql - 查询日程日期比较

mysql - 检查数组至少包含数组的所有值

python - 安装 MySQL Python(在 Windows 7 上)

php - 在 mysql 中给外键起别名

mysql - 给定时间间隔的 SQL 查询?

mysql - 如何将 varchar 字段转换为 datetime 数据类型?

mysql - 在 laravel 5.0 中使用 FLUENT 的 datetime 列的日期值

php - 使用现有记录设置日期格式 php mySQL。如何?

具有特定数量条目的列的 MYSQL 总和