Atitit.数据库事务隔离级别 attilax 总结

Atitit.数据库事务隔离级别

1. 事务隔离级别的作用 1

2. 在的隔离级别 2

3. 常见数据库的默认管理级别 3

1. 事务隔离级别的作用

较低的隔离级别可以增强许多用户同时访问数据的能力,但也增加了用户可能遇到的并发副作用(例如脏读或丢失更新)的数量。相反,较高的隔离级别减少了用户 可能遇到的并发副作用的类型,但需要更多的系统资源,并增加了一个事务阻塞其他事务的可能性。应平衡应用程序的数据完整性要求与每个隔离级别的开销,在此 基础上选择相应的隔离级别。最高隔离级别(可序列化)保证事务在每次重复读取操作时都能准确检索到相同的数据,但需要通过执行某种级别的锁定来完成此操 作,而锁定可能会影响多用户系统中的其他用户。最低隔离级别(未提交读)可以检索其他事务已经修改、但未提交的数据。在未提交读中,所有并发副作用都可能 发生,但因为没有读取锁定或版本控制,所以开销最少

作者:: 老哇的爪子 Attilax 艾龙,  EMAIL:[email protected]

转载请注明来源: http://blog.csdn.net/attilax

当多个事务同时进行时,通过设置隔离级别来处理脏读不可重复读幻读事件

read uncommitted | 0 未提交读

将查询的隔离级别指定为 0。

可以读脏数据

读脏数据:一事务对数据进行了增删改,但未提交,有可能回滚,另一事务却读取了未提交的数据

read committed | 1 已提交读

将查询的隔离级别指定为 1。

避免脏读,但可以出现不可重复读幻读

不可重复读:一事务对数据进行了更新或删除操作,另一事务两次查询的数据不一致

幻像读:一事务对数据进行了新增操作,另一事务两次查询的数据不一致

repeatable read | 2 可重复读

将查询的事务隔离级别指定为 2。

避免脏读,不可重复读,允许幻像读

serializable | 3 可序列化

将查询的隔离级别指定为 3。

串行化读,事务只能一个一个执行,避免了脏读不可重复读、幻读

执行效率慢(我遇到过一种情况,用时是隔离级别1的30倍),使用时慎重

SNAPSHOT  

当读取数据时,可以保证读操作读取的行是事务开始时可用的最后提交版本。

这意味着这种隔离级别可以保证读取的是已经提交过的数据,并且可以实现可重复读,

也能确保不会幻读。不过这种隔离级别使用的不是共享锁,而是行版本控制

SQL Server 2005以后的版本支持。

下表显示了不同隔离级别允许的并发副作用。


隔离级别


脏读


不可重复读


虚拟读取


未提交读





已提交读





可重复读





快照





可序列化




2. 在的隔离级别

EAD UNCOMMITTED 指定语句可以读取已由其他事务修改但尚未提交的行。 在 READ UNCOMMITTED 级别运行的事务,不会发出共享锁来防止其他事务修改当前事务读取的数据。READ UNCOMMITTED 事务也不会被排他锁阻塞,排他锁会禁止当前事务读取其他事务已修改但尚未提交的行。设置此选项之后,可以读取未提交的修改,这种读取称为脏读。在事务结束 之前,可以更改数据中的值,行也可以出现在数据集中或从数据集中消失。该选项的作用与在事务内所有 SELECT 语句中的所有表上设置 NOLOCK 相同。这是隔离级别中限制最少的级别。

READ COMMITTED 指定语句不能读取已由其他事务修改但尚未提交的数据。这样可以避免脏读。其他事务可以在当前事务的各个语句之间更改数据,从而产生不可重复读取和幻像数据。该选项是 SQL Server 的默认设置。

REPEATABLE READ 指定语句不能读取已由其他事务修改但尚未提交的行,并且指定,其他任何事务都不能在当前事务完成之前修改由当前事务读取的数据。 对事务中的每个语句所读取的全部数据都设置了共享锁,并且该共享锁一直保持到事务完成为止。这样可以防止其他事务修改当前事务读取的任何行。其他事务可以 插入与当前事务所发出语句的搜索条件相匹配的新行。如果当前事务随后重试执行该语句,它会检索新行,从而产生幻读。由于共享锁一直保持到事务结束,而不是 在每个语句结束时释放,所以并发级别低于默认的 READ COMMITTED 隔离级别。此选项只在必要时使用。

3. 常见数据库的默认管理级别

Mssql的默认级别 默认的READ COMMITTED隔离级别来访问数据

首先要明确Oracle里支持的隔离级别:read committed/serializable,默认的是read committed,而MySQl支持的隔离级别:read uncommitted/read committed/repeatable read/serializable,默认的是repeatable read;

先说结论:Oracle的read committed的锁力度和隔离级别相当于MySQL的read committed,因此Oracle里默认的一致读对

Oralce_MySQL默认隔离级别对比 - Oracle - 次元立方网 - 电脑知识与技术互动交流平台.htm

隔离级别_百度百科.htm

这个涉及到数据库的隔离级别。默认情况下,oracle,mssql,mysql都是READ COMMITTED隔离级别来访问数据

你这个原理是这样::

事务A,打开 ,然后读取了数据,此时还没有提交A事务

事务B紧接的更新数据,并提交事务

事务A再次读取该数据,发现数据已经改变了。

因为,默认数据库READ COMMITTED级别,顾名思义,就是可以保证读取已经提交的数据,防止脏读。。

如果为了性能考虑,更改了数据库的配置默认隔离级别为 read uncommitted,就不是这样的情况了,就发现不了数据的改变了。。

时间: 2024-08-03 19:31:10

Atitit.数据库事务隔离级别 attilax 总结的相关文章

MySQL数据库事务隔离级别(Transaction Isolation Level)

今天在学习JDBC的时候看到了关于MySql的事务的隔离级别的问题,感觉内容挺高级的,所以记录一篇文章,以备后面使用. 数据库隔离级别有四种,应用<高性能mysql>一书中的说明: 然后说说修改事务隔离级别的方法: 1.全局修改,修改mysql.ini配置文件,在最后加上 1 #可选参数有:READ-UNCOMMITTED, READ-COMMITTED, REPEATABLE-READ, SERIALIZABLE. 2 [mysqld] 3 transaction-isolation = R

数据库事务隔离级别-- 脏读、幻读、不可重复读

一.数据库事务隔离级别 数据库事务的隔离级别有4个,由低到高依次为Read uncommitted .Read committed .Repeatable read .Serializable ,这四个级别可以逐个解决脏读 .不可重复读 .幻读 这几类问题. √: 可能出现    ×: 不会出现   脏读 不可重复读 幻读 Read uncommitted √ √ √ Read committed × √ √ Repeatable read × × √ Serializable × × × 注意

数据库事务隔离级别(转)

1.什么是事务,事务的特性是什么? 在数据库中事务是工作的逻辑单元,一个事务是由一个或多个完成一组的相关行为的SQL语句组成,通过事务机制确保这一组SQL语句所作的操作要么都成功执行,完成整个工作单元操作,要么一个也不执行. SQL92标准定义了数据库事务的四个特点: 原子性(Atomicity):一个事务里面所有包含的SQL语句是一个执行整体,不可分割,要么都做,要么都不做. 一致性(Consistency):事务开始时,数据库中的数据是一致的,事务结束时,数据库的数据也应该是一致的. 隔离性

数据库事务隔离级别

数据库事务的隔离级别有4个,由低到高依次为Read uncommitted.Read committed.Repeatable read.Serializable,这四个级别可以逐个解决脏读.不可重复读.幻读这几类问题. √: 可能出现    ×: 不会出现   脏读 不可重复读 幻读 Read uncommitted √ √ √ Read committed × √ √ Repeatable read × × √ Serializable × × × 注意:我们讨论隔离级别的场景,主要是在多个

数据库事务隔离级别&lt;转&gt;

数据库事务的隔离级别有4个,由低到高依次为Read uncommitted.Read committed.Repeatable read.Serializable,这四个级别可以逐个解决脏读.不可重复读.幻读这几类问题. √: 可能出现    ×: 不会出现   脏读 不可重复读 幻读 Read uncommitted √ √ √ Read committed × √ √ Repeatable read × × √ Serializable × × × 注意:我们讨论隔离级别的场景,主要是在多个

数据库:自己理解的“数据库事务隔离级别”

转载请注明出处: jiq?钦's technical Blog - 季义钦 引言:在网上搜了很多关于事务的文章,感觉单独来看都很难看懂,所以综合自己的理解写一篇我自己能理解的关于关系型数据库事务的文章. 一.事务特征 我们都知道数据库事务具备ACID特性: Atomic(原子性):一个事务要么成功,要么失败 Consistency(一致性):一致性代表了底层数据存储的完整性.事务执行前后数据库都必须处于一个合法的状态.什么才是一个合法的状态? 比如满足数据库的唯一性约束.数据类型验证.引用完整性

MSSQL数据库 事务隔离级别

数据库事务的隔离级别有4个,由低到高依次为Read uncommitted .Read committed .Repeatable read .Serializable ,这四个级别可以逐个解 脏读 .不可重复读 .幻读 这几类问题. √: 可能出现    ×: 不会出现   脏读 不可重复读 幻读 Read uncommitted √ √ √ Read committed × √ √ Repeatable read × × √ Serializable × × × 注意:我们讨论隔离级别的场景

数据库事务隔离级别及传播行为

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

MySQL数据库事务隔离级别

数据库隔离级别有四种,应用<高性能mysql>一书中的说明: 然后说说修改事务隔离级别的方法: 1.全局修改,修改mysql.ini配置文件,在最后加上 1 #可选参数有:READ-UNCOMMITTED, READ-COMMITTED, REPEATABLE-READ, SERIALIZABLE. 2 [mysqld] 3 transaction-isolation = REPEATABLE-READ 这里全局默认是REPEATABLE-READ,其实MySQL本来默认也是这个级别 2.对当