
课程咨询: 400-996-5531 / 投诉建议: 400-111-8989
认真做教育 专心促就业
mysql数据库是软件开发程序员需要重点掌握的一个编程技术,下面我们就通过案例分析来了解一下,mysql数据库锁的类型。
共享锁(SharedLocks),也可以叫做读锁,简称S锁。可以并发的读取数据,但是任何事务都不能对数据进行修改。
独占锁(ExclusiveLocks),也可以叫做排他锁或者写锁,简称X锁。若某个事物对某一行加上了排他锁,只能这个事务对其进行读写,在此事务结束之前,其他事务不能对其进行加任何锁,其他进程可以读取,不能进行写操作,需等待其释放。
来分析一下获取锁的情形:假如存在事务A和事务B
事务A获取了一条记录的S锁,此时事务B也想获取该条记录的S锁,那么事务B也能获取到该锁,也就是说事务A和事务B同时持有该条记录的S锁。
如果事务B想要获取该记录的X锁,则此操作会被阻塞,直到事务A提交之后将S锁释放。
如果事务A先获取的是X锁,则不管事务B想获取该记录的S锁还是X锁都会被阻塞,直到事务A提交。
因此,我们可以说S锁和S锁是兼容的,S锁和X锁是不兼容的,X锁和X锁也是不兼容的。
意向共享锁(IntentionSharedLock),简称IS锁。当事务准备在某条记录上加S锁时,需要先在表级别加一个IS锁。
意向独占锁(IntentionExclusiveLock),简称IX锁。当事务准备在某条记录上加X锁时,需要先在表级别加一个IX锁。
意向锁是表级锁,它们的提出仅仅为了在之后加表级别的S锁和X锁时可以快速判断表中的记录是否被上锁,以避免用遍历的方式来查看表中有没有上锁的记录。就是说其实IS锁和IS锁是兼容的,IX锁和IX锁是兼容的。
为什么需要意向锁?
InnoDB的意向锁主要用户多粒度的锁并存的情况。比如事务A要在一个表上加S锁,如果表中的一行已被事务B加了X锁,那么该锁的申请也应被阻塞。如果表中的数据很多,逐行检查锁标志的开销将很大,系统的性能将会受到影响。
【免责声明】:本内容转载于网络,转载目的在于传递信息。文章内容为作者个人意见,本平台对文中陈述、观点保持中立,不对所包含内容的准确性、可靠性与完整性提供形式地保证。请读者仅作参考。更多内容请加danei0707学习了解。欢迎关注“达内在线”参与分销,赚更多好礼。