MYSQL 删除前触发(不是删除而是更新

MYSQL trigger before delete (instead of deleting rather update

我有两个 table,一个包含候选人信息,另一个包含数据库中被视为个人的每个人的个人信息。但是,不应从数据库中删除候选人,应保留其非个人数据以供记录。删除候选人必须只删除他的个人数据。所以我试图在候选人 table 上写一个删除之前的触发器,它获取我们试图删除的候选人的 ID,并将他们的所有个人信息设置为 null。当我 运行 触发器时,它只 returns 一条消息说候选人被删除但是当我检查个人信息 table 时,该候选人的行仍然有所有信息。我可能做错了什么? 这是触发器的代码:

USE `agence_interim`;

DELIMITER $$

DROP TRIGGER IF EXISTS agence_interim.candidat_BEFORE_DELETE$$
USE `agence_interim`$$
CREATE DEFINER = CURRENT_USER TRIGGER `agence_interim`.`candidat_BEFORE_DELETE` BEFORE DELETE ON `candidat` FOR EACH ROW
BEGIN
DECLARE errorMessage VARCHAR(255);
Update personne SET personne.id_personne = null, 
personne.nom = null, 
personne.prenom = null,
 personne.email = null,
 personne.telephone =null,
 personne.date_naissance =null,
 personne.description = null
WHERE personne.id_personne = OLD.id_personne;

    SET errorMessage = CONCAT('The personal information for candidate number ',
                        OLD.id_personne,
                        ' has been deleted');
                        
        SIGNAL SQLSTATE '45000' 
            SET MESSAGE_TEXT = errorMessage;
            
END$$
DELIMITER ;

恐怕在 MySQL 中使用触发器是不可能的。

在触发器主体中使用 SIGNAL 语句会中止生成触发器的 DELETE 操作,但是当触发器中止时,这也会取消在触发器主体内执行的所有从属更改(以及由这些更改等)。

MySQL 中不支持“代替”触发器。要么所有更改都成功,要么 none 个更改成功。

要为所欲为,不能从客户端使用 DELETE。

您必须使用更新。