创建DELETE触发器阻止特定行删除时遇错误求助
解决MySQL DELETE触发器阻止删除特定行的问题
错误原因分析
你当前触发器中直接使用entidades_tipos.created_by是错误的。在BEFORE DELETE触发器中,要访问即将被删除的行的字段,必须使用OLD关键字来引用该行的数据,直接引用原表名会导致表找不到的报错。
正确的触发器代码
替换成以下代码即可解决问题:
CREATE TRIGGER `prevenirBorrado` BEFORE DELETE ON `entidades_tipos` FOR EACH ROW BEGIN IF OLD.created_by = 0 THEN SIGNAL SQLSTATE 'U0042' SET MESSAGE_TEXT = 'No puedes borrar este registro!' ; END IF ; END
关于AFTER DELETE触发器的误区
你考虑使用AFTER DELETE加ROLLBACK的方案不可行,原因如下:
AFTER DELETE触发器触发时,目标行已经完成删除操作,此时执行ROLLBACK无法单独恢复该行(仅能回滚整个事务,但触发器本身无法主动发起回滚)- MySQL的触发器语法不允许直接使用
ROLLBACK语句,该操作仅能在存储过程或显式事务中执行
额外注意事项
- 若在PHPMyAdmin中创建触发器时遇到语法错误,需先修改语句分隔符:
- 执行
DELIMITER // - 执行上述触发器创建代码
- 执行
DELIMITER ;恢复默认分隔符
- 执行
- 确保你拥有触发器创建权限,且
entidades_tipos表存在于当前操作的数据库中
内容的提问来源于stack exchange,提问作者Viktor
相关产品推荐
相关产品推荐

