数据库事务的四种隔离机制和七种传播行为

MySQL数据库为我们提供的四种隔离级别:(依次解决脏读、不可重复读、幻读)

  ① Serializable (串行化):可避免脏读、不可重复读、幻读的发生。

  ② Repeatable read (可重复读):可避免脏读、不可重复读的发生。(Mysql默认的方式)

  ③ Read committed (读已提交):可避免脏读的发生。(Oracle默认的方式)

  ④ Read uncommitted (读未提交):最低级别,任何情况都无法保证。(INNODB内部机制)

数据库事务正常执行的四个特性:

ACID属性:

原子性(atomicity):即不可分割,事务要么全部被执行,要么全部不执行

一致性(consistency):事务的执行使得数据库从一种正确状态转换成另外一种正确状态

隔离性(isolation):在事务正确提交之前,不允许把事务对该数据的改变提供给任何其他事务

持久性(durability):事务正确提交之后,其结果将永远保存在数据库之中,即使在事务提交之后有了其他故障,事务的处理结果也会得到保存

并发下事务产生的问题:

1、脏读:事务A读到了事务B还没有提交的数据;

2、不可重复读:在一个事务里面读取了两次某个数据,读出来的数据不一致;

3、幻读:在一个事务里面的操作中发现了未被操作的数据。

幻读,需要应用使用加锁读来保证。而这个加锁度使用到的机制就是next-key locks。

SELECT * FROM t_bitfly LOCK IN SHARE MODE;

SELECT * FROM t_bitfly FOR UPDATE;(重复读,看到其他事物提交的数据)。

不同的隔离级别在数据库中的加锁策略不一样:

Read uncommitted - 读不需要加锁,写仅仅需要加行锁

Read committed - 需要加写锁,读必须等待写事务结束。避免脏读

Repeatable reads - 需要加读锁,当有事务在读一行记录,其他写同一行的事务都会阻塞。避免不可重复读。

Serializable - 需要加范围锁,当有事务 SELECT 某个范围的数据时,其他访问同一范围的事务都会阻塞。避免幻读。

Oracle数据库中:

Serializable (串行化)级别。

Read committed (读已提交)这两种级别,其中默认的为Read committed级别。

在MySQL数据库中查看当前事务的隔离级别:

select @@tx_isolation;

  在MySQL数据库中设置事务的隔离 级别:

set  [glogal | session]  transaction isolation level 隔离级别名称;    set tx_isolation=’隔离级别名称;’


事务传播行为类型


说明


PROPAGATION_REQUIRED


如果当前没有事务,就新建一个事务,如果已经存在一个事务中,加入到这个事务中。这是 最常见的选择。


PROPAGATION_SUPPORTS


支持当前事务,如果当前没有事务,就以非事务方式执行。


PROPAGATION_MANDATORY


使用当前的事务,如果当前没有事务,就抛出异常。


PROPAGATION_REQUIRES_NEW


新建事务,如果当前存在事务,把当前事务挂起。


PROPAGATION_NOT_SUPPORTED


以非事务方式执行操作,如果当前存在事务,就把当前事务挂起。


PROPAGATION_NEVER


以非事务方式执行,如果当前存在事务,则抛出异常。


PROPAGATION_NESTED


如果当前存在事务,则在嵌套事务内执行。如果当前没有事务,则执行与 PROPAGATION_REQUIRED 类似的操作。

原文地址:https://www.cnblogs.com/shuchen007/p/9973435.html

时间: 2024-11-05 14:39:13

数据库事务的四种隔离机制和七种传播行为的相关文章

数据事务四种隔离机制和七种传播行为

一.隔离级别: 数据库事务的隔离级别有4个,由低到高依次为Read uncommitted.Read committed.Repeatable read.Serializable,这四个级别可以逐个解决脏读.不可重复读.幻读这几类问题. 1. ISOLATION_READ_UNCOMMITTED:这是事务最低的隔离级别,它充许令外一个事务可以看到这个事务未提交的数据.      这种隔离级别会产生脏读,不可重复读和幻像读.2. ISOLATION_READ_COMMITTED:保证一个事务修改的

事务的四种隔离级别和七种传播行为

很多人容易搞混不可重复读和幻读,确实这两者有些相似.但不可重复读重点在于update和delete,而幻读的重点在于insert. 避免不可重复读需要锁行就行 避免幻影读则需要锁表 如果使用锁机制来实现这两种隔离级别,在可重复读中,该sql第一次读取到数据后,就将这些数据加锁,其它事务无法修改这些数据,就可以实现可重复 读了.但这种方法却无法锁住insert的数据,所以当事务A先前读取了数据,或者修改了全部数据,事务B还是可以insert数据提交,这时事务A就会 发现莫名其妙多了一条之前没有的数

数据库事务的四个基本特征以及事务的隔离级别

一.数据库事务的四个基本特征 事务是作为一个逻辑单元执行的一系列操作,一个逻辑工作单元必须有四个属性,称为 ACID(原子性.一致性.隔离性和持久性)属性,只有这样才能成为一个事务. 1.原子性(Atomicity):事务中包含的操作被看做一个逻辑单元,这个 逻辑单元中的操作要么全部成功,要么全部失败. 2.一致性(Consistency):一致性是指事务必须使数据库从一个一致性状态变换到另一个一致性状态,也就是说一个事务执行之前和执行之后都必须处于一致性状态. 拿转账来说,假设用户A和用户B两

Spring的4种事务特性,5种隔离级别,7种传播行为

spring事务: 什么是事务: 事务逻辑上的一组操作,组成这组操作的各个逻辑单元,要么一起成功,要么一起失败. 事务特性(4种): 原子性 (atomicity):强调事务的不可分割. 一致性 (consistency):事务的执行的前后数据的完整性保持一致. 隔离性 (isolation):一个事务执行的过程中,不应该受到其他事务的干扰 持久性(durability) :事务一旦结束,数据就持久到数据库 如果不考虑隔离性引发安全性问题: 脏读 :一个事务读到了另一个事务的未提交的数据 不可重

网上资料笔记总结!!数据库事务并发问题,锁机制和对应的4种隔离级别

数据库事务并发问题 数据库的操作通常为写和读,就是所说的CRUD:增加(Create).读取(Read).更新(Update)和删除(Delete).事务就是一件完整要做的事情.事务是恢复和并发控制的基本单位.事务必须始终保持系统处于一致的状态,不管在任何给定的时间并发事务有多少.事务在关系数据库中,一个事务可以是一条SQL语句,一组SQL语句或整个程序.是数据库中各种数据项的一个程序执行单元.事务是用户定义的一个操作序列(多个表同时读写).这些操作要么都做,要么都不做,是一个不可分割的工作单位

数据库事务的四种隔离模式

四种隔离模式主要是用来解决不同线程的事务造成的几种问题: 1.修改丢失:两个事务A,B对同一数据同时进行读取与修改,出现事务B 覆盖事务A的提交结果 2.脏读:事务A读到事务B修改却未提交的数据,事务B回滚数据修改操作,导致了事务A获得数据是脏数据(也可以理解为事务A获取的数据与数据库中存储的数据是不一致的) 3.(不可重复读)虚读:事务A先读取某一行数据,事务B对改行数据进行修改,事务B再一次读取该行数据时就会造成前后两次读取结果不一致. 4.幻读:事务A读取某段数据,事务B对其进行插入或者删

数据库事务的四种隔离级别

数据库事务的隔离级别有4个,由低到高依次为: Read uncommitted 未授权读取 读未提交 读可允许其他两个事务不能同时进行写操作 事务B读取事务A为提交的数据 避免更新丢失 会出现脏读 Read committed 授权读取 读提交 读可允许其他 未提交的事务禁止其他事务访问进行 事务A读取数据 事务B更改数据 事务A读取B更改后的数据,前后结果不一致 避免脏读 会出现不可重复读(重复读取结果不同) Repeatable read 可重复读取 读不允许写事务进行 写禁止其他事务进行

MYSQL数据库事务4种隔离级别及7种传播行为

事务的特性: 原子性:事务的不可分割,组成事务的各个逻辑单元不可分割. 一致性:事务执行的前后,数据完整性保持一致. 隔离性:事务执行不应该受到其他事务的干扰. 持久性:事务一旦结束,数据就持久化到数据库中. 查看/设置隔离级别 查看:SELECT @@tx_isolation  设置:set tx_isolation='xxx' 事务的隔离级别 如果不考虑隔离性,引发一些安全问题 隔离性:一个事务的执行,不应该受到其他事务的干扰. 脏读:一个事务读到了另一个事务未提交的数据,导致查询结果不一致

mysql的事务四个特性以及事务的四个隔离级别

一.事务四大属性 分别是原子性.一致性.隔离性.持久性. 1.原子性(Atomicity) 原子性是指事务包含的所有操作要么全部成功,要么全部失败回滚,因此事务的操作如果成功就必须要完全应用到数据库,如果操作失败则不能对数据库有任何影响. 2.一致性(Consistency) 一致性是指事务必须使数据库从一个一致性状态变换到另一个一致性状态,也就是说一个事务执行之前和执行之后都必须处于一致性状态.举例来说,假设用户A和用户B两者的钱加起来一共是1000,那么不管A和B之间如何转账.转几次账,事务