mysql - 创建 MySQL 触发器时出现语法错误

标签 mysql triggers mysql-error-1064

我在尝试触发时遇到了一些问题。

这是我对触发器的 MySQL 查询:

delimiter //
CREATE TRIGGER `aggiornaProduzione`
BEFORE UPDATE ON `strutture` FOR EACH ROW
BEGIN
DECLARE temp bigint;
IF ( tipo=1/*mercato*/ AND old.livello <> new.livello )
THEN (
    SELECT round(2*livello*livello + 13.8*livello)
    FROM strutture WHERE tipo=1 AND city=old.city INTO temp;
    WHILE (temp%6<>0) temp=temp+1;
    END WHILE;
    UPDATE strutture SET produzione=temp WHERE city=new.city AND tipo=1;
    )
END IF;
END //

错误是

#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '; WHILE (temp%6<>0) temp=temp+1; END WHILE; UPDATE strutture SET ' at line 8

有人知道我为什么会收到此错误吗?

最佳答案

删除 THEN 子句两边的括号。此外,您的 WHILE 子句在语法上不正确:

delimiter //
CREATE TRIGGER `aggiornaProduzione`
BEFORE UPDATE ON `strutture` FOR EACH ROW
BEGIN
DECLARE temp bigint;
IF ( tipo=1/*mercato*/ AND old.livello <> new.livello )
THEN
    SELECT round(2*livello*livello + 13.8*livello)
    FROM strutture WHERE tipo=1 AND city=old.city INTO temp;
    WHILE temp%6<>0 DO
      SET temp=temp+1;
    END WHILE;
    UPDATE strutture SET produzione=temp WHERE city=new.city AND tipo=1;
END IF;
END //

关于mysql - 创建 MySQL 触发器时出现语法错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19621482/

相关文章:

mysql修改表外键!

mysql - SQL语法创建表

mysql - 指向 MySQL 查询抽象接口(interface)的指针片段

PHP MySQL 多重连接

mysql - 在 PHPMyAdmin 中设置触发器

mysql - 在插入触发器之前在 MYSQL 中使用自动增量值?

wpf - Blend KeyTrigger 多次触发

php - 在 WHERE 子句中使用 if 条件时出现 MySQL 语法错误

mysql - 触发错误 ER_CANT_UPDATE_USED_TABLE_IN_SF_OR_TRG : Can't update table

mysql - 我想显示包含给定成分但也有其他成分的食谱