视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
数据库事务的级别
2020-11-09 15:33:18 责编:小采
文档


1.read uncommitted(脏读)(读取正在提交的数据) read uncommitted(又称读取未提交内容)允许任务读取数据库中未提交的数据更改。 测试脚本: 创建表 CREATE TABLE [dbo].[testTb]( [ID] [int] NULL, [Name] [char](20) NULL ) 2.建立 事务A:插入数据 begin

1.read uncommitted(脏读)(读取正在提交的数据)

read uncommitted(又称读取未提交内容)允许任务读取数据库中未提交的数据更改。

测试脚本:

  1. 创建表

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完成后才可以读取数据

    下载本文
    显示全文
    专题