MySQL 交易:一笔大交易对多笔小交易

MySQL Transaction: One Large Transaction against Multiple Small Transactions

大交易的设计..

START TRANSACTION;
    /*
        INERT for login detail
    */
    /*
        INSERT for personal information
    */
    /*
        INSERT for user's transaction account
    */
COMMIT; 

以及小型交易的设计..

START TRANSACTION;
    /*
        INSERT for login detail
    */
COMMIT;

START TRANSACTION;
    /*
        INSERT for personal information
    */
COMMIT;

START TRANSACTION;
    /*
        INSERT for user's transaction account
    */
COMMIT;  

当前结果

我处理这种情况的经验不足以提供这种情况下的最佳解决方案。这里可以做出什么样的解决方案?

使用事务的意义在于保证存储数据的一致性。 当你进行事务​​时,所有的插入、更新和删除都不会立即存储在数据库中,数据库会使用暂定数据锁定 tables(或行,具体取决于配置),直到它到达提交命令.那时数据被写入并且锁被释放。

如果您进行了 "small" 笔交易,那么这与根本不进行交易是一样的。

如果您的 "big" 事务卡住了,请找出是哪个 table 导致了死锁,以及为什么会这样。 原因有很多,包括 table 上的并发 inserts/updates/deletes,没有及时释放锁,之前的事务停留在 "alive"(即未到达提交命令),DB 存储时间太长table 上的数据、插入之间的时间过长、违反外键等

您可以阅读这篇文章,其中解释了事务的工作原理以及如何识别和避免死锁 http://flylib.com/books/en/1.142.1.79/1/

经过多年的工作经验,我想出了这个解决方案.. 因为受影响模块的数据在成功或失败时都完好无损。感谢大家的帮助

START TRANSACTION;
    /*
        INSERT for login detail
    */
    /*
        INSERT for personal information
    */
    /*
        INSERT for user's transaction account
    */
COMMIT;