并发一致性解决方法

本文详细介绍了SQL中的并发问题,包括数据丢失、不可重复读、脏读及幻影读等现象。并通过不同级别的事务隔离措施来解决这些问题,如ReadUncommitted、ReadCommitted、RepeatableRead和Serializable等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在SQL中,当对数据库中的一个表进行并发操作时,会出现 数据丢失、不可重复读、脏读和幻影读的情况。

处理该并发问题的解决方法:

  1 封锁:

 1.1 共享锁(又称读锁,如果事务A1用共享锁读取数据B,A1事务没有结束,那么事务A2在A1事务期间,可以  用共享  锁来读取数据,但不能用排它锁来修改数据。)

 1.2 排它锁:(又称写锁,如果事务A1用排它锁来操作数据B,那么只能是事务A1来对数据B进行读写操作,其它事务不可以对数据B进行任何操作。)

  2  封锁协议:

 具体分为1,2,3个级别(具体作用是对锁的做出的限制规则,这里不作讨论)。

  3 事务隔离级别:

 SQL主要通过事务隔离级别在后台自动进行锁的操作,来解决并发操作一致性的问题。具体分类如下:

3.1 ReadUnCommitted:相当于NOLOCK,并发操作会出现 数据丢失、不可重复读、脏读和幻影读的情况。

3.2 ReadCommitted:SQL数据库默认的事务隔离级别。

    在对数据进行读的时候,用共享锁(有效时间,读取时间);

    在对数据进行修改操作时用排它锁(有效时间,事务时间),在事务级别是ReadCommitted级别并对数据进行修改时,其它事务是不能对数据进行任何读写操作的。

    在这种级别下并发操作不会出现数据丢失和脏读的情况,但会出现不可重复读和幻影读的情况。

3.3 RepeatableRead:可重复读,有效期间在事务执行期间。在事务A读取数据,其它事务不可以修改数据(插入除外)

    在这种级别下并发操作不会出现数据丢失,脏读,不可重复读的情况;但是,还会出现幻影读的情况。

3.4 Serializable:A1事务读取执行期间,其它事务部可以对事物进行任何操作。

    在这种级别下并发操作不会出现数据丢失,脏读,不可重复读和幻影读的情况。

   参考引用:http://www.cnblogs.com/zhenyulu/articles/330494.html 很经典

   

                                    

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值