说我运行一个查询,将100个已标记为要复制的记录(200个)复制到临时表中,然后将该临时表的内容复制到另一个表中,现在在此查询期间,100个记录中的一个导致主键违规
现在如果发生这种情况我想运行另一个查询,该查询将一个条目添加到错误日志表中并删除可能已从临时表中复制的所有数据并清除临时表本身
我想知道我是否可以在MySQL中抛出异常,以便它可以运行我的备用代码
注意:我不想使用事务,因为它锁定表,我有其他同时运行的查询需要读取/写入第一个表(它们不会触及已标记为的记录复制感谢一个标志,表明它们已被标记)
答案 0 :(得分:1)
如果仅在SQL中编写此文件,您将需要使用退出handler!该页面上存在重复的密钥违例示例。处理程序只能在存储过程中使用,但要将事件记录到表中,无论如何都要使用过程。您将为要复制的每个记录调用存储过程。然后,如果其中一个失败,请将记录插入到日志表中,其中可能包含导致违规的id。
然而,这比使应用程序读取潜在的MySQL错误并将其写入日志文件效率低,因为您可以在临时表中使用批量INSERT。