2013-05-16 57 views
0

说我运行一个查询,将100个被标记为要复制(200个)的记录复制到一个临时表中,然后将该临时表的内容复制到另一个表中,现在在此查询期间,100个记录中的一个会导致主键冲突有没有办法在mysql中运行异常代码

现在,如果发生这种情况,我想运行另一个查询,它将一个条目添加到错误日志表中,并删除可能从其中复制的所有数据临时表和清楚,我想知道如果我可以抛出在MySQL中的异常,因此它可以运行我的备用代码的临时表本身

注:我不想使用事务,因为它锁表和我有其他查询运行在同一时间需要读/写第一个表(他们不接触已被标记为复制的记录感谢到一个标志,表明他们已经被标记)

回答

1

如果只用SQL写这个,你会想要使用退出handler!该页面上存在重复的键违规示例。处理程序只能在存储过程中使用,但要将事件记录到表中,无论如何您都需要使用过程。您会为每个要复制的记录调用一个存储过程。然后,如果其中一个失败,请将一条记录插入日志表中,可能是导致违规的ID。

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

相关问题