`

mysql中事务处理那点事

阅读更多

1事务隔离级别

事务有ACID特性:

A:atomicity 原子性 要么都操作成功,要么就都失败。只有查询的事务很容易处理原子性,但是有更新和插入动作的事务,就要注意并发对这部分数据的影响了。

 

C:consistency 一致性 当某一个字段是表的唯一标示时,如果事务修改了这个标示并破坏了表唯一性,那么系统可以自动撤销事务的这个动作。

 

I:isolation 隔离性 隔离性也可以叫做并发控制 concurrency control 可串行化 serializability 锁 locking  也就是说呢很多歌事务一起提交的时候彼此是看不到对方的,其也是基于一个粗粒度的锁机制 granular lock 所以就会有某数据库支持行锁,表锁等

 

D:durability 持久性 事务一旦提交就一定是永久性保存的,即使发生宕机,数据库也是可以恢复的,但是这只是事务系统的保证,并不会衍生到硬件级别的。也就是说,持久性是保证事务系统的高可靠性 high reliability 不是高可用性 high availability,例如raid卡坏了和自然灾害就没法通过持久性来保证数据还在了。

 

事务的分类:

扁平事务 flat transactions 这种事务在一般系统中使用率很高,我写的ostocyjshop基本都是,很简单很好懂。但是对于分阶段进行的业务就不适用扁平事务了,因为回滚的代价太高了。

 

带有保存点的扁平事务 flat transactions with savepoints 当使用begin work 开启一个事务时都会默认加入一个保存点,保存点的计数是延续的,不会因为回滚到某个点而重新计数。

 

链事务:chained transactions 是保存点事务的一个变体,由于保存点是容易丢失的 volatile 不是 persistent的,所以当恢复保存点时,事务不能从最近的一个保存点继续执行了,必须重新执行了。链事务的意思是:一个事务开始时,释放不需要的数据对象,将上下文处理传递给下一个事务,形成一个原子性的合并事务。下一个事务是知道上一个事务的结果的,当这个合并事务需要被回滚时,只能回滚到最近的一个保存点,链事务在提交后释放持有的锁,但是保存点事务会一直持有从头到尾所有点的锁。(应该是这个意思)

 

嵌套事务 nested transactions 你可以理解成一个树结构,有一个根控制着所有的节点,节点控制叶子。根只能控制节点的逻辑,而无法触及叶子的行为。叶子的行为交由节点来控制。叶子可以是一个子事务,提交给节点,但是效果并不会反映到db中,必须根提交了事务才会把所有节点的事务反映到db中。如果叶子中有事务失败,那么所有事务都要回滚。嵌套事务是可以用保存点事务来模拟的,但是锁的控制上相对复杂。要真正的实现并发事务处理,还是需要db支持嵌套事务的。

 

分布式事务 distributed transactions 及扁平事务分布在网络节点中。mysql的innodb引擎无法支持并行事务,可以用保存点事务模拟。

 

事务的隔离级别

READ UNCOMMITTED  对事务来说叫做浏览访问 browse access

READ COMMITTED 在mysql5.0前对于这种事务隔离下,会造成master和slave的不一致问题,主要问题还是记录sql和表变化的日志文件的格式是statement而不是row的,也就是非行级别而是语句级别的。但在mysql5.1后都是row级别了,不会有不一致问题。

REPEATABLE READ 是mysql inndb引擎的默认事务级别

SERIALIZABLE  主要用于innodb存储引擎在分布式环境下的事务隔离级别

 

 

未授权读取

也称为读未提交(Read Uncommitted):允许脏读取,但不允许更新丢失。如果一个事务已经开始写数据,则另外一个数据则不允许同时进行写操作,但允许其他事务读此行数据。该隔离级别可以通过“排他写锁”实现。

授权读取

,也称为读提交(Read Committed):允许不可重复读取,但不允许脏读取。这可以通过“瞬间共享读锁”和“排他写锁”实现。读取数据的事务允许其他事务继续访问该行数据,但是未提交的写事务将会禁止(延缓)其他事务访问(写)该行。

可重复读取

可重复读取(Repeatable Read):禁止不可重复读取和脏读取,但是有时可能出现幻影数据。这可以通过“共享读锁”和“排他写锁”实现。读取数据的事务将会禁止写事务(但允许读事务),写事务则禁止任何其他事务。

序列化

序列化(Serializable):提供严格的事务隔离。它要求事务序列化执行,事务只能一个接着一个地执行,但不能并发执行。如果仅仅通过“行级锁”是无法实现事务序列化的,必须通过其他机制保证新插入的数据不会被刚执行查询操作的事务访问到。
隔离级别越高,越能保证数据的完整性和一致性,但是对并发性能的影响也越大。对于多数应用程序,可以优先考虑把数据库系统的隔离级别设为Read Committed。它能够避免脏读取,而且具有较好的并发性能。尽管它会导致不可重复读、虚读和第二类丢失更新这些并发问题,在可能出现这类问题的个别场合,可以由应用程序采用悲观锁乐观锁来控制。 

 

 

分享到:
评论

相关推荐

    mySQL事务处理

    关于mysql的事务处理 public static void StartTransaction(Connection con, String[] sqls) throws Exception { if (sqls == null) { return; } Statement sm = null; try { // 事务开始 System....

    mysql事务处理用法与实例详解

    ### MySQL事务处理用法与实例详解 #### 一、事务的概念及重要性 在数据库管理中,事务(Transaction)是指一系列作为一个整体的操作序列。这些操作要么全部成功,要么全部失败,不能只执行其中的一部分。事务处理...

    深入剖析Oracle与MySQL在事务处理上的差异

    在数据库管理系统中,事务处理是确保数据一致性和完整性的关键机制。Oracle和MySQL作为两大...通过本文的分析和代码示例,读者应该能够更深入地理解Oracle与MySQL在事务处理上的差异,并在实际应用中做出更合适的选择。

    nodejs + mysql 事务处理问题

    nodejs + mysql 事物处理问题 呵呵 看了就知道 记得npm install啊 需要的东西啊 本想免费 苦于没积分 ,需要的的同学,给点分吧

    mysql分布式事务实现 MySQL XA pdf

    MySQL从5.1版本开始支持XA接口,从而能够参与到分布式事务处理中。 #### 六、MySQL XA MySQL服务器作为资源管理器,在分布式事务中扮演着核心角色。客户端通过连接到MySQL服务器并使用XA协议来进行分布式事务的管理...

    MySql事务处理.docx

    在事务处理中,回滚段(rollback segments)和保存点(savepoints)也扮演着重要角色。回滚段用于存储undo信息,而保存点允许在事务内部设置临时的提交点,可以部分回滚到保存点而不影响整个事务。 总的来说,MySQL...

    MySQL与事务

    本文将详细介绍MySQL中的事务处理机制,尤其是InnoDB存储引擎下如何确保事务的ACID特性。 #### 二、事务处理的基本概念 事务处理在数据库中是非常重要的一个概念,它确保了一系列操作要么全部成功完成,要么完全不...

    mysql 中关于事务的处理

    ### MySQL中的事务处理 #### 一、事务的基本概念与特性 **事务(Transaction)**是数据库管理系统执行过程中一系列操作的集合,这些操作被视为一个不可分割的工作单元。事务必须具有四个特性,即原子性(Atomicity...

    掌握分布式事务的艺术:深入MySQL XA事务处理

    ### 掌握分布式事务的艺术:深入 MySQL XA 事务处理 #### 1. 分布式事务与 XA 事务概述 ##### 1.1 分布式事务定义 分布式事务是指那些跨越多个数据库实例或者服务的事务。这类事务的管理比单一数据库上的事务更加...

    MySQL或Oracle通过ODBC与C#建立连接和进行事务处理

    ### MySQL或Oracle通过ODBC与C#建立连接和进行事务处理 #### 一、概述 在现代企业级应用开发中,数据库的选择对于整个系统的稳定性和性能有着至关重要的影响。随着多语言开发的需求日益增长,如何让不同的编程语言...

    MySql事务处理.pdf

    MySQL中的事务处理是数据库管理的重要组成部分,主要目的是确保数据的一致性和完整性。事务是一组SQL语句,它们作为一个单元执行,要么全部成功,要么全部回滚,这确保了原子性。事务处理的引入是为了解决多用户、多...

    Java实现的mysql事务处理操作示例

    "Java实现的mysql事务处理操作示例" 本文主要介绍了Java实现的mysql事务处理操作,结合实例形式较为详细的分析了Java基于JDBC操作mysql数据库实现事务处理的相关概念、操作技巧与注意事项。 事务处理是数据库操作...

    java使用jdbc对mysql的操作封装,包括java使用jdbc对mysql进行事务处理

    封装了java使用jdbc对mysql的操作,以及java使用jdbc对mysql的事务处理,对execute、executeUpdate、executeQuery进行了封装,把繁琐的创建数据库连接对象、PreparedStatement对象、结果集对象,打开关闭连接进行了...

    PHP MySQL 与 MsSQL 中的事务

    在PHP中使用MySQL事务,通常涉及到几个关键函数:`mysql_query()`、`mysql_rollback()` 和 `mysql_commit()`。下面通过示例代码来详细说明: ```php // 开启事务 mysql_query("SET AUTOCOMMIT=0"); mysql_query(...

    MySQLTDSQL事务处理技术

    0 数据异常 读数据异常 写数据异常 写偏序异常 数据异常发生的原因 1 MySQL的事务处理技术概述 2 MySQL的并发访问控制技术 3 主流数据库的事务处理技术

    MySQL事务隔离级别

    MySQL事务隔离级别是数据库管理系统中一个非常重要的概念,它关系到数据的一致性和并发性能。在MySQL中,事务被用于确保数据库操作的原子性、一致性、隔离性和持久性(ACID特性)。事务隔离级别主要涉及四个方面:读...

    mysql事务处理[归类].pdf

    MySQL的事务处理是数据库管理中的核心功能,尤其在软件开发中,确保数据一致性、安全性和可靠性至关重要。事务处理允许数据库操作作为一个不可分割的整体执行,确保数据的完整性和一致性。在人员管理系统等应用中,...

    mysql支持事务配置,配置InnoDB引擎

    其中,InnoDB存储引擎因其支持事务处理、行级锁定和外键等功能,成为众多应用场景中的首选。本文将详细介绍如何在MySQL中配置支持事务的操作以及启用InnoDB存储引擎的方法。 #### 二、InnoDB存储引擎简介 InnoDB是...

Global site tag (gtag.js) - Google Analytics