
课程咨询: 400-996-5531 / 投诉建议: 400-111-8989
认真做教育 专心促就业
我们在前几期的文章中给大家简单介绍了Java编程开发中锁的类型与应用等内容,而本文我们就继续来学习一下,意向锁与行级锁的区别。
表锁和意向锁的兼容互斥关系
意向共享锁、意向独占锁是兼容的。
如果该表持有意向共享锁,意味着表中有记录持有共享锁,那么表共享锁可以加锁成功;表独占锁加锁失败,阻塞等待
如果该表持有意向独占锁,意味着表中有记录持有独占锁,那么表共享锁、表独占锁加锁失败,阻塞等待
元数据锁
元数据锁(metadatalock,MDL)是MySQL5.5版本引入的。
MDL不需要显式使用,在访问一个表的时候会被自动加MDL锁。
MDL锁分为:MDL读锁、MDL写锁:
DML操作(数据的增删改查:insert、delete、update、select)加MDL读锁
DDL操作(对表结构做变更操作)加MDL写锁。
MDL锁的加锁、释放锁的规则:
MDL读锁与MDL读锁互不干扰。
MDL写锁与MDL写锁、MDL写锁与MDL读锁相互阻塞。用来保证变更表结构操作的安全性。
MDL锁使用两段锁:事务获得锁之后,一直持有锁直到事务结束(包括提交或中止)。
MDL锁作用是:防止DDL操作和DML操作并发,保证变更表结构操作的安全性。
需要注意的是,如果申请加MDL锁失败,那么再此之后的加锁申请都必须等待(公平锁机制,遵循先来先执行原则,先来的没有加锁成功,后来的不能加锁)。因此执行DDL操作时要格外注意,如果操作执行时间过长,后面的DML操作都将被阻塞较长时间。
行级锁
行级锁就是对记录加锁。
行级锁又分为各种类型,不同类型的行级锁的作用也不同,行级锁分为:
RecordLock:行锁,单个行记录的锁
GapLock:间隙锁,作用于记录与记录之间的空隙,作用仅仅是为了防止满足搜索条件的记录插入空隙(防止插入幻影记录)
Next-KeyLock:索引区间锁,本质是一个行锁和一个GapLock的结合体
【免责声明】:本内容转载于网络,转载目的在于传递信息。文章内容为作者个人意见,本平台对文中陈述、观点保持中立,不对所包含内容的准确性、可靠性与完整性提供形式地保证。请读者仅作参考。更多内容请加danei0707学习了解。欢迎关注“达内在线”参与分销,赚更多好礼。