2010-12-02 39 views
0

我想写一个过程来处理将数据插入到两个表中。如果插入件在任何一个中都失败,那么整个过程将失败。我尝试了很多种不同的方式,无法实现。我有意让我的第二次插入失败,但数据无论如何都插入到第一个表中。寻找一个使用row_count的过程的例子

我试图嵌套基于rowcount的IF语句,但即使数据在第二次插入时失败,数据仍然被插入到第一个表中。我正在查找总共2个受影响的行。

有人能告诉我如何处理多个插入和回滚,如果其中一个失败?一个简短的例子会很好。

回答

0

如果您使用的是InnoDB表(或其他兼容引擎),则可以使用MySQL的Transaction功能,该功能允许您按照自己的意愿进行操作。

  • 基本上你开始交易
  • 做查询的结果
  • 检查如果每一个结果是正常调用CONMIT
  • 否则你调用ROLLBACK作废事务中的所有查询。

你可以阅读和文章关于与例子here

HTH!

+0

我应该在我的文章已经提到,但我所做的假设,即每个人都知道我是已经在使用交易。问题是row_count为第一个插入返回1,我假设第二个插入为-1。即使事务已经开始,但当第二次插入失败时,数据仍会插入到第一个表中。我已经测试了应该等于2的受影响的行。如果不是回滚其他提交。 – jim 2010-12-02 08:59:55

0

您可以尝试关闭自动提交功能。它可能会自动提交你的第一次插入,即使您没有明确承诺一个已经开始的交易:

SET autocommit = 0; START TRANSACTION ......