数据库事务的级别
1.read uncommitted(脏读)(读取正在提交的数据) read uncommitted(又称读取未提交内容)允许任务读取数据库中未提交的数据更改。 测试脚本: 创建表 CREATE TABLE [dbo].[testTb]( [ID] [int] NULL, [Name] [char](20) NULL ) 2.建立 事务A:插入数据 begin
1.read uncommitted(脏读)(读取正在提交的数据)
read uncommitted(又称读取未提交内容)允许任务读取数据库中未提交的数据更改。
测试脚本:
- 创建表
CREATE TABLE [dbo].[testTb](
[ID] [int] NULL,
[Name] [char](20) NULL
)
2.建立 事务A:插入数据
begin tran
insert into testTb values(5,'e')
waitfor delay '00:00:10'
commit;
3.建立事务B:读取数据
set transaction isolation level read uncommitted
begin tran
select * from testTb
commit;
4.运行事务A立即运行事务B,此时事务A还没有提交,而事务B可以读取事务A正在提交的数据
2.read committed(提交读)(不能读取正在提交的数据)
级别Read Committed(又称读取已提交内容)可防止脏读。该级别查询只读取已提交的数据更改。如果事务需要读取被另一未完成事务 修改的数据,该事务将等待,直到第一个事务完成(提交或回退)。
CREATE TABLE [dbo].[testTb](
[ID] [int] NULL,
[Name] [char](20) NULL
)
2.建立 事务A:插入数据
begin tran
insert into testTb values(5,'e')
waitfor delay '00:00:10'
commit;
3.建立事务B:读取数据
set transaction isolation level read committed
begin tran
select * from testTb
commit
4.运行事务A立即运行事务B,此时事务A还没有提交,而事务B必须等到事务A完成后才可以读取数据
3.REPEATABLE READ(可重复读)(读取数据是不能修改)
指定语句不能读取已由其他事务修改但尚未提交的行,并且指定,其他任何事务都不能在当前事务完成之前修改由当前事务读取的数据。
CREATE TABLE [dbo].[testTb](
[ID] [int] NULL,
[Name] [char](20) NULL
)
2.建立 事务A:更新数据
begin tran
update testTb set Name='CV' where ID='8'
waitfor delay '00:00:10'
commit;
3.建立事务B:读取数据
set transaction isolation level repeatable read
begin tran
select * from testTb
commit
4.运行事务A立即运行事务B,此时事务A还没有提交,而事务B必须等到事务A完成后才可以读取数据
4.SERIALIZABLE(顺序读)(读取数据是不可插入或修改)
- 语句不能读取已由其他事务修改但尚未提交的数据。
- 任何其他事务都不能在当前事务完成之前修改由当前事务读取的数据。
- 在当前事务完成之前,其他事务不能使用当前事务中任何语句读取的键值插入新行。
CREATE TABLE [dbo].[testTb](
[ID] [int] NULL,
[Name] [char](20) NULL
)
2.建立 事务A:更新数据和插入数据
begin tran
insert into testTb values(9,'d')
update testTb set Name='CV' where ID='8'
waitfor delay '00:00:010'
commit;
3.建立事务B:读取数据
set transaction isolation level level serializable
begin tran
select * from testTb
commit;
4.运行事务A立即运行事务B,此时事务A还没有提交,而事务B必须等到事务A完成后才可以读取数据
推荐阅读
-
数据库分析工具有哪些(实测最好用的5大工具)
-
sqlserver 多表查询不同数据库服务器上的表
-
SQL Server中通过扩展存储过程实现数据库的远程备份与恢复
-
sql server中通过查询分析器实现数据库的备份与恢复方法分享
-
SQL Server 作业的备份(备份作业非备份数据库)
-
卸载VS2011 Developer Preview后Sql Server2008 R2建立数据库关系图报“找不到指定的模块”错误的解决方法
-
sql 判断数据库,表,存储过程等是否存在的代码
-
MSSQL 数据库备份和还原的几种方法 图文教程
-
SQLServer中数据库文件的存放方式,文件和文件组
-
Sql2000数据库的备份文件恢复到Sql2005的方法