如何在MYSQL中编写一个触发器来中止删除?
我读了这个文章 但它似乎不适用于删除。尝试创建触发器时出现此错误:
在服务器中执行SQL脚本
错误:错误 1363:DELETE 触发器中没有新行
CREATE TRIGGER DeviceCatalog_PreventDeletion
BEFORE DELETE on DeviceCatalog
FOR EACH ROW
BEGIN
DECLARE dummy INT;
IF old.id = 1 or old.id =2 THEN
SELECT * FROM DeviceCatalog WHERE DeviceCatalog.id=NEW.id;
END IF;
END;
SQL脚本执行完成:语句:4条成功,1条失败
I read this article but it seems not work for delete. I got this error when tried to create a trigger:
Executing SQL script in server
ERROR: Error 1363: There is no NEW row in on DELETE trigger
CREATE TRIGGER DeviceCatalog_PreventDeletion
BEFORE DELETE on DeviceCatalog
FOR EACH ROW
BEGIN
DECLARE dummy INT;
IF old.id = 1 or old.id =2 THEN
SELECT * FROM DeviceCatalog WHERE DeviceCatalog.id=NEW.id;
END IF;
END;
SQL script execution finished: statements: 4 succeeded, 1 failed
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
尝试这样的事情 -
Try something like this -
使用@MathewFoscarini关于MySQL SIGNAL 命令,您可以发出自定义错误消息信号,而不是通过调用不存在的过程来引发错误。
SQLSTATE 45000被选为MySQL参考手册< /a> 建议:
这样,每当用户尝试删除 ID
1
或2
记录时,您的自定义消息就会显示给用户。此外,如果不应从表中删除任何记录,您只需删除IF .. THEN
和END IF;
行即可。这将防止删除表中的任何记录。Improving @Devart's (accepted) answer with @MathewFoscarini's comment about MySQL SIGNAL Command, instead of raising an error by calling an inexistent procedure you could signal your custom error message.
The SQLSTATE 45000 was chosen as MySQL's Reference Manual suggests:
This way your custom message will be shown to the user whenever it tries to delete records ID
1
or2
. Also, if no records should be deleted from the table, you could just remove theIF .. THEN
andEND IF;
lines. This would prevent ANY records from being deleted on the table.嗯,错误消息非常清楚地告诉您:在 DELETE 触发器中没有 NEW。
在 DELETE 中使用 NEW 毫无意义,就像在 INSERT 中使用 OLD 毫无意义一样。
Well, the error messages tells you quite clearly: in a DELETE trigger there is no NEW.
It simply makes no sense to have NEW in a DELETE, just as OLD in an INSERT makes no sense.
正如错误所示:删除时没有新变量。
您只能在插入和更新时使用 new.id 。请改用 old.id。
As the error says: There is no NEW variable on delete.
you can use new.id only on insert and update. Use old.id instead.