如何覆盖 MySQL DELETE 命令来更新字段而不是删除行?

Con*_*ney 6 mysql delete update

我想知道是否可以覆盖 MySQLDELETE命令的功能来更新所选行上的字段而不是完全删除它。

这使得可以设置一个标志,例如deletedfrom 0/ nullto 1,而不使用UPDATE

是否可以这样做,如果可以,如何做?

Mic*_*bot 8

不,这是不可能的。DELETE您可以使用触发器或(如果适用)外键约束来阻止删除,但除了删除之外您无法执行任何操作。

它在语义上并不更正确——您正在更新一行,而不是删除一行。 DELETE表示删除 0 行或更多

如果您确实想使用“删除”一词,请创建一个具有适当名称的存储过程,该存储过程接受主键作为其参数。

要完全防止删除,请使用如下简单的触发器:

CREATE TRIGGER t1_bd
BEFORE DELETE ON t1 -- table name
FOR EACH ROW
SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = 'table t1 does not support deletion';
Run Code Online (Sandbox Code Playgroud)

这将立即终止查询并防止删除。

当触发器在其主体中包含单个非复杂语句(如上面的语句)时,不需要 常规DELIMITER语句和BEGIN/块。END

SQLSTATE 45000 表示未处理的用户定义异常