美文网首页
2. 事务锁与语句锁冲突吗?

2. 事务锁与语句锁冲突吗?

作者: 剑心折手 | 来源:发表于2019-04-14 12:33 被阅读0次

    数据库只对原子操作(Sql语句与事务)加锁。大体如下:

    问题:事务本来包含多个单句,那么事务加了锁,单句还要加吗?

    解答:这是个重要的问题,在数据库的实际设计中,的确没有划清界线,有了事务锁了,就不要语句锁了。在事务中,我们称事务锁为大锁,语句锁为小锁;而且只有共享锁分大小,而排斥锁不分(因为都是大锁)。继续往下看,就明白了。


    三种级别行锁都来一遍,就清楚了。

    一、读未提交(Read Uncommitted)。读不加任何锁,写加共享锁。

    二、读已提交(Read committed)。读加小共享锁,写加排斥锁。(这一点特别重要)。这个级别是默认的,无论对于事务还是语句。

    (注)在上面两条Select语句之间是没有锁的,所以其它查询是可以进行获取锁而改变数据的。这一点是读已提交级别的核心。这也是此级别会产生不可重复性读的问题的原因。

    三、可串行读(Repeatable Read)。读加大共享锁,写加排斥锁。(这一点特别重要)

    可见:

    1、数据库两个写操作之间,必须串行,即使在最低级别。

    2、数据库两个读操作之间,必须并行,即使在最高级别。

    3、数据库的写操作,必须加锁,即使在最低级别。也就保证了写的独立性。

    4、数据库的读操作,永远不会加排斥锁,保证了读的共享性。

    相关文章

      网友评论

          本文标题:2. 事务锁与语句锁冲突吗?

          本文链接:https://www.haomeiwen.com/subject/rzmjwqtx.html