0

假设我运行一个查询,将标记为要复制的 100 条记录(共 200 条)复制到临时表中,然后将该临时表的内容复制到另一个表中,现在在此查询期间,100 条记录中的一条导致主密钥违规

现在,如果发生这种情况,我想运行另一个查询,该查询将条目添加到错误日志表中,并删除可能已从临时表中复制的所有数据并清除临时表本身

我想知道我是否可以在 MySQL 中引发异常,以便它可以运行我的备用代码

注意:我不想使用事务,因为它会锁定表,并且我有其他同时运行的查询需要读/写第一个表(它们不会触及已标记为要复制的记录,感谢表示它们已被标记的标志)

4

1 回答 1

1

如果仅在 SQL 中编写,您将需要为此使用退出处理程序!该页面上有一个重复的密钥违规示例。处理程序只能在存储过程中使用,但是要将事件记录到表中,无论如何您都需要使用过程。您将为要复制的每条记录调用一个存储过程。然后,如果其中一个失败,则将一条记录插入到日志表中,其中可能包含导致违规的 id。

但是,这比让应用程序读取潜在的 MySQL 错误并将其写入日志文件效率低,因为您可以使用批量 INSERT 到临时表中。

于 2013-05-17T01:59:37.330 回答