在插入新行之前,我遇到了创建新触发器的问题。 它应该在插入之前执行以停止插入具有已从同一表中的另一行引用的值的新行的插入。 我尝试使用此触发器,但它与mariaDB不兼容,实际上它在引用时给出了asyntax错误。
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!!');
我如何用新语法做同样的事情? 感谢。
答案 0 :(得分:0)
每个数据库(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种语法更改(WHEN
,NEW
,SET
)。