并发一致性解决方法

    技术2022-05-11  79

    在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 很经典

       

                                        


    最新回复(0)