MySQL 触发器:在删除之前在日志中插入 table

MySQL Triggers: INSERT ON log BEFORE DELETE ON table

这是我第一次 post 来这里! =]

我正在创建一个触发器以在每次有人试图从 table

中删除某些内容时插入日志 table
CREATE DEFINER=`root`@`localhost` TRIGGER `user_before_delete`      
BEFORE DELETE ON `user` FOR EACH ROW BEGIN

INSERT INTO log_alert(id, table_id, name)
VALUES('99002', OLD.id, OLD.name);

SIGNAL SQLSTATE '99002'
SET MESSAGE_TEXT = 'TRYING TO REMOVE A USER!'
END

但问题是: SIGNAL SQLSTATE 回滚整个操作! 那么,如何在日志 TABLE 上插入并防止删除用户?

在使用 BEGIN/END 块之前,将分隔符更改为 $$,然后切换回:

DELIMITER $$

CREATE DEFINER=`root`@`localhost` TRIGGER `user_before_delete`      
BEFORE DELETE ON `user` FOR EACH ROW BEGIN

INSERT INTO log_alert(id, table_id, name)
VALUES('99002', OLD.id, OLD.name);

SIGNAL SQLSTATE '99002'
SET MESSAGE_TEXT = 'TRYING TO REMOVE A USER!';

END $$

DELIMITER ;

试试吧!!!

Marc B 解决方法对我有用 =]

quick/dirty workaround: change log_alert to be a myisam table. no transactions there, so no way to roll back your insert. –  Marc B 15 hours ago

只需将 log_alert 更改为 MyISAM 类型,INSERTS 将不再回滚