【问题标题】:Trigger before insert in MariaDB在 MariaDB 中插入之前触发
【发布时间】:2017-10-26 14:45:27
【问题描述】:

在插入新行之前创建新触发器时遇到了一些问题。 它应该在插入之前停止插入具有已从同一表中的另一行引用的值的新行。 我尝试使用此触发器,但它与 mariaDB 不兼容,实际上它在引用时给了我语法错误。

CREATE TRIGGER BadgeAlreadyUsed
BEFORE INSERT ON User
REFERENCING NEW AS N 
FOR EACH ROW
WHEN (EXISTS ( SELECT IDBadge FROM User WHERE N.IDBadge = User.IDBadge ))
SIGNAL SQLSTATE '70002' ('Badge already used!!'); 

我怎样才能用新语法做同样的事情? 谢谢。

【问题讨论】:

  • 能否请您包含语法错误。我怀疑是FOR EACH ROW 之后的SQL 导致了问题。
  • 我一直在 db2 中使用这种语法,我认为它与 mariaDB 不兼容。
  • 这是错误:#1064 'REFERENCING NEW AS N FOR EACH ROW WHEN (EXISTS (SELECT IDBadge FROM User W' line 3) 附近的 SQL 中的语法错误

标签: triggers insert mariadb


【解决方案1】:

每个数据库(DB2、MariaDB 等)都有数百个差异。不要假设任何事情!

这可能更接近:

CREATE TRIGGER BadgeAlreadyUsed
    BEFORE INSERT ON User
FOR EACH ROW
BEGIN
    IF (EXISTS ( SELECT IDBadge FROM User
           WHERE NEW.IDBadge = User.IDBadge ))
    THEN
        SIGNAL SQLSTATE '70002'
           SET MESSAGE_TEXT = 'Badge already used!!'; 
    END IF;
END;

请注意,至少有 3 处语法更改(WHENNEWSET)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-12
    • 2017-08-15
    • 2022-01-19
    • 2018-04-17
    • 1970-01-01
    相关资源
    最近更新 更多