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;
当前结果
我在我们的应用程序中都尝试过,并且通过使用 'Big' 事务,我们在某个 table 中遇到了死锁。
通过使用小额交易,有可能三个中的一个或两个不运行而导致差异。
我处理这种情况的经验不足以提供这种情况下的最佳解决方案。这里可以做出什么样的解决方案?
使用事务的意义在于保证存储数据的一致性。
当你进行事务时,所有的插入、更新和删除都不会立即存储在数据库中,数据库会使用暂定数据锁定 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;
大交易的设计..
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;
当前结果
我在我们的应用程序中都尝试过,并且通过使用 'Big' 事务,我们在某个 table 中遇到了死锁。
通过使用小额交易,有可能三个中的一个或两个不运行而导致差异。
我处理这种情况的经验不足以提供这种情况下的最佳解决方案。这里可以做出什么样的解决方案?
使用事务的意义在于保证存储数据的一致性。 当你进行事务时,所有的插入、更新和删除都不会立即存储在数据库中,数据库会使用暂定数据锁定 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;