mysql - 无法创建 MySql 触发器

标签 mysql database-trigger

我是 MySql 触发器的新手。我有一个任务来创建检查插入值的触发器,但它在 if 语句中抛出错误,我不知道如何解决它

    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 'IF  new.price > @maxi 
        THEN
            ROLLBACK
        else
            INSERT INTO Laptop
            SELECT * FROM inserted
 at line 1

代码:

    CREATE TRIGGER ChekInsert BEFORE INSERT ON Laptop FOR EACH ROW
    BEGIN

        SELECT @maxi := MAX(price)*0.5 FROM Laptop
        IF  new.price > @maxi 
        THEN
            ROLLBACK
        else
            INSERT INTO Laptop
            SELECT * FROM inserted
        end if
    END    

最佳答案

更改了我的代码,一切正常

delimiter $$
CREATE TRIGGER ChekInsert BEFORE INSERT ON Laptop FOR EACH ROW
BEGIN
    declare maxi float;
    select MAX(price)*0.5 into maxi FROM Laptop;
        if NEW.price > @maxi then
            SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = 'price is incorrect';
        end if;

end $$

delimiter;

要在触发器中包含多个语句,您必须更改默认分隔符,并且不需要回滚,因为它是在抛出错误时触发的

关于mysql - 无法创建 MySql 触发器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59505485/

相关文章:

Mysql:根据列中的值查找列名,在另一个表中搜索列名作为值

php - 无法检索 PDOStatement 受影响的行数

每个用户最多两个条目的 SQL 唯一约束

MySQL检查表是否只包含这种特定类型

php - 类、实例和对象的问题

mysql - 将列设置为与另一个表中的列相同

mysql - 如何正确使用Scala Play Anorm和Option[String]插入NULL SQL

mysql - 如何正确执行触发器?

mysql - 在 PhpMyAdmin 中创建触发器导致语法错误

postgresql 在触发器中设置默认值