mysql - 使用触发器取消删除

标签 mysql triggers abort

我想取消 DELETE 触发。这个想法是在删除之前,设置列 hide = "Y" 然后取消 TRIGGER 事件,而不是真正删除该行。

可能吗?

最佳答案

您可以取消删除,但无法更改 DELETE 触发器中的值。

DELIMITER $$

CREATE TRIGGER bd_t1_each BEFORE DELETE ON t1 FOR EACH ROW
BEGIN
  //This will not work, because the `NEW` virtual table does not exist in a delete trigger.
  SET NEW.hide = 'Y';
  //Raising an error will work.
  SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = 'DELETE canceled'; 
END $$

DELIMITER ;

相反,您应该创建一个存储过程来隐藏您的行:

DELIMITER $$

CREATE PROCEDURE delete_t1_row (pID INTEGER)
BEGIN
  UPDATE t1 SET hide = 'Y' WHERE id = pID;
END $$

DELIMITER ;

关于mysql - 使用触发器取消删除,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8056964/

相关文章:

mysql - 具有内部连接的复杂 SQL Select 查询

jquery - 无限滚动手动触发

c# - 你能中止一个属性(property)的设定程序吗

javascript - 如何中止(停止)循环执行的 promise 链? - JavaScript

php - Laravel 如何设置帖子路由 ID?

php - 获取具有特定值的 MySQL 表数据

mysql - 识别从属中的触发器已被复制语句调用

c - gdb 通过指向错误的代码行显示不正确的回溯

php - Mysql 获取今天日期和 future 的结果

MySQL 在 END 附近创建触发器语法错误