gpt4 book ai didi

MySQL 事务 : One Large Transaction against Multiple Small Transactions

转载 作者:可可西里 更新时间:2023-11-01 06:38:18 27 4
gpt4 key购买 nike

大交易的设计..

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;

当前结果

  • 我在我们的应用程序中都尝试过,并且通过使用“大”事务,我们在某个表中遇到了死锁。

  • 通过使用小事务,三个事务中的一个或两个可能无法运行并导致差异。

我处理此类案例的经验不足以提供此类场景中的最佳解决方案。这里可以做出什么样的解决方案?

最佳答案

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

如果您进行“小”交易,则与根本不进行交易一样。

如果您的“大”事务被卡住了,找出导致死锁的表,以及为什么会这样。原因有很多,包括表上的并发插入/更新/删除、未按时释放锁、以前的事务保持“事件”状态(即未到达提交命令)、DB 花费太多时间将数据存储在表上,插入之间的时间过长,违反外键等。

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

关于MySQL 事务 : One Large Transaction against Multiple Small Transactions,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31715074/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com