MySQL 事务:一个大事务对抗多个小事务

     2023-03-22     53

关键词:

【中文标题】MySQL 事务:一个大事务对抗多个小事务【英文标题】:MySQL Transaction: One Large Transaction against Multiple Small Transactions 【发布时间】:2015-07-30 04:16:11 【问题描述】:

大交易的设计..

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;  

当前结果

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

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

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

【问题讨论】:

【参考方案1】:

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

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

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

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

【讨论】:

好吧,鉴于此案的信息有限以及提出的非特定问题,我会尽力提供帮助,哈哈【参考方案2】:

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

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

【讨论】:

mysql面试总结

MySQL面试总结#MySQL的存储引擎`MyISAM`(默认表类型):非事务的存储引擎,基于传统的`ISAM`(有索引的顺序访问方法)类型,是存储记录和文件的标准方法,不是事务安全,不支持外键,适用于频繁的查询。表锁,不会出现死锁... 查看详情

mysql多个select需要放入一个事务吗?

...同事问了个问题:在多个select的时候,用不用放入同一个事务?首先先看个例子:[java]viewplaincopyprint?public class JDBCClient         public static void&n 查看详情

17mysql事务

事务特性MySQL事务是一组SQL语句,它们被视为单个工作单元,要么全部执行成功,要么全部失败回滚。MySQL使用事务来保证在多个并发用户之间的数据一致性。MySQL事务遵循ACID原则,即:原子性(Atomicity):一个事务是一个不可... 查看详情

mysql事务对查询有没有影响

您好,MySQL事务对查询有着重要的影响。MySQL事务是一种数据库技术,它可以保证一组SQL语句在执行过程中的原子性,即要么全部执行,要么全部不执行。这意味着,当您使用MySQL事务时,您可以确保您的查询不会被中断,从而保... 查看详情

什么叫mysql事务?

1.普通事务以begin/starttransaction开始,commit/rollback结束的事务。或者是带有保存点savepoint的事务。2.链式事务一个事务在提交的时候自动将上下文传给下一个事务,也就是说一个事务的提交和下一个事务的开始是原子性的,下一个... 查看详情

mysql高级——锁与事务(代码片段)

MySQL高级(二)——锁与事务文章目录MySQL高级(二)——锁与事务一、MySQL锁机制**1.1锁与其应用场景锁的类型和适合的场景读阻塞写、写阻塞读手动锁定一行实现一个事务行锁升级为表锁的情况间隙锁的问题(范... 查看详情

mysql高级——锁与事务(代码片段)

MySQL高级(二)——锁与事务文章目录MySQL高级(二)——锁与事务一、MySQL锁机制**1.1锁与其应用场景锁的类型和适合的场景读阻塞写、写阻塞读手动锁定一行实现一个事务行锁升级为表锁的情况间隙锁的问题(范... 查看详情

MySql binlog 可以有多个打开的事务吗?

】MySqlbinlog可以有多个打开的事务吗?【英文标题】:CanMySqlbinloghavemorethanoneopentransaction?【发布时间】:2022-01-2323:56:40【问题描述】:MySqlbinlog是否可以同时有多个打开的事务(=不同事务的事件在binlog中交错)?XIDevent包含事务ID... 查看详情

mysql5事务详解(代码片段)

一概念事务(Transaction)是访问和更新数据库的程序执行单元;事务中可能包含一个或多个sql语句,这些语句要么都执行,要么都不执行。作为一个关系型数据库,MySQL支持事务,本文介绍基于MySQL5.6。 一个经典案例说明事务... 查看详情

如果查询使用多个连接,mysql 事务会起作用吗?

】如果查询使用多个连接,mysql事务会起作用吗?【英文标题】:Willamysqltransactionworkifmultipleconnectionsareusedforthequeries?【发布时间】:2012-01-1217:39:54【问题描述】:所以这里...//我开始交易$mysqli=newmysqli(...);//开始事务$mysqli->自动... 查看详情

mysql事务(详解)(代码片段)

Mysql事务一、事务存在的意义1、事务定义事务:事务是一个最小的不可在分的工作单元;通常一个事务对应一个完整的业务(例如银行账户转账业务,该业务是一个最小的工作单元)一个完整的业务需要批量的DML(insert、... 查看详情

mysql事务grant权限

事务mysql课堂笔记一、创建事务事务相当于将多个sql语句打包起来mysql事务四个原则ACID原则1.原子性要么都执行要么都不执行,一个事物就是一个整体2.一致性事物执行,前后数据保持一致,不存在数据丢失。3.隔离性在执行过程... 查看详情

mysql5.7复制的一个小bug-xa事务

...,并没有任何rollback语句:看下本地的relaylog,找到这个事务的gtid到这里,这个relaylog日志文件结束了。很显然问题也找到了,就是执行出错了。首先我们看到这个rollback是MySQL自己加上去的,那么为什么要加呢?mysql为了保证一... 查看详情

12事务

1.事务的概念指逻辑上的一组操作,组成这组操作的各个单元,要不全部成功,要不全部不成功mysql默认自带事务,但是mysql自带的事务是一条语句独占一个事务我们也可以自己来控制事务:starttransaction; --开启事务,这条语句... 查看详情

怎么避免mysql死锁

...ql死锁1、以固定的顺序访问表和行。比如两个更新数据的事务,事务A更新数据的顺序为1,2;事务B更新数据的顺序为2,1;。这样更可能会造成死锁。2、大事务拆小。大事务更倾向于死锁,如果业务允许,将大事务拆小。3.在同... 查看详情

jdbc连接mysql操作事务

事务ACID原则原子性:要么都完成,要么都不完成一致性:总数不变隔离性:多个业务互不干扰持久性:一旦提交不可逆,持久化到数据库隔离性的问题:脏读:一个事务读取了另一个没有提交的事务不可重复度:在同一个事务... 查看详情

一个大事务,有很多更新,现在被回滚了,但是又着急关机重启,怎么办才好?(代码片段)

一个大事务,有很多更新,现在被回滚了,但是又着急关机重启,怎么办才好?1、首先,尽量避免在MySQL中执行大事务,因为大事务将会带来主从复制延迟等问题。2、大事务被kill,MySQL会自动进行回滚操作,通过showengineinnodbstat... 查看详情

mysql—事务(代码片段)

事务一、事务的基本介绍概念:如果一个包含多个步骤的业务操作被事务管理,那么这些操作要么同时成功,要么同时失败操作:开启事务:starttransaction回滚:rollback提交:commitMySQL数据库中事务默认... 查看详情