关于数据库锁的分享

锁的介绍:

     范围如下:

     1.兼容性:共享锁与排它锁

             共享锁和排它锁是innoDB实现的标准行级锁:也就是s锁和x锁。

             排它锁(x锁):可以让持有锁的事务更新或者删除一行。

             共享锁(s锁):可以让持有锁的事务读取一行。

             举个例子:

                  a.如果事务Tr1持有行r的s锁,事务Tr2请求行r的锁时会有以下处理过程:

                     Tr2请求行r的s锁会被允许,Tr1和Tr2都会拥有行r的s锁。

                     Tr2请求行r的x锁不会被允许,必须等待Tr1释放行r的s锁。

                  b.如果事务Tr1持有行r的x锁,事务Tr2请求行r的锁时会有以下处理过程:

                     Tr2请求行r的s锁或者x锁都不会被允许,必须等待Tr1释放行r的x锁。

            小结:

      2.加锁机制:乐观锁和悲观锁

           乐观锁和悲观锁其实是对数据库数据冲突的一种态度:

           乐观锁:认为数据一般不会发生冲突,只有在数据进行提交的时候才对数据冲突进行检测。如果数据发生了冲突才会进行错误信息返回,提醒用户,如果没有冲突则对数据进行提交更新。

           悲观锁:认为数据一定会发生冲突,所以在数据读取的时候就数据进行加锁,加锁后其它数据将暂时不会进行修改。

           区别

           乐观锁并不会对数据进行加锁,从而效率比较高,适合读操作。而悲观锁是利用数据库加锁机制对数据进行加锁,加锁后其他读取操作也要进行等待。乐观锁如果有人在之前更新了,你的更新应当是被拒绝的。悲观锁则会等待前一个更新完成。

           实现:

           悲观锁:依靠数据库的锁机制来实现。

           乐观锁:一般根据数据库版本记录机制来实现。

    3.锁的粒度:所谓粒度,即细化的程度。锁的粒度越大,则并发性越低且开销大;锁的粒度越小,则并发性高且开销小。

    (1)行锁,行锁是粒度中最小的资源。行锁就是指事务在操作数据的过程中,锁定一行或多行的数据,其他事务不能同时处理这些行的数据。行级锁占用的数据资源最小,所以在事务的处理过程中,允许其它事务操作同一表的其他数据。

    (2)页锁,一次锁定一页。25个行锁可升级为一个页锁。

    (3)表锁,锁定整个表。当整个数据表被锁定后,其他事务就不能够使用此表中的其他数据。使用表锁可以使事务处理的数据量大,并且使用较少的系统资源。但是在使用表锁时,会延迟其他事务的等待时间,降低系统并发性。

    (4)数据库锁,防止任何事务和用户对此数据库进行访问。可控制整个数据库的操作。

   4.锁的模式:

       记录锁:

       记录锁是最简单的行锁,仅仅锁住一行;记录锁永远加在索引上,即使一个表没有索引,innoDb会隐式创建一个索引,并使用这个所以实现记录锁;会阻塞其他事务对其插入,更新,修改

      Gap锁:间隙锁是一种加在两个索引之间的锁,加在第一个索引之前或者最后一个索引之后的间隙;

                    使用间隙锁锁住的是一个区间,而不仅仅是这个区间中的每一条数据;

                    间隙锁只阻止其他事务插入到间隙中,他们不阻止其他事务在同一个间隙上获取的间隙锁,所以gap x lock和 gap s                        lock有相同作用

      next-key锁

                    next-key锁是记录锁和间隙锁的组合,它指的是加在某条记录以及这条记录前面间隙上的锁

      意向锁

                   意向共享锁(IS锁):事务想要获得一张表中某几行的共享锁

                   意向排他锁(IX锁):事务想要获得一张表中某几行的排他锁

      插入意向锁

                    是在插入一行记录操作之前设置的一种间隙锁,这个锁释放了一种插入方式信号,亦即多个事务在相同的索引间隙插 入时如果不是插入间隙中相同的位置就不需要互相等待。

              

             

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值