
课程咨询: 400-996-5531 / 投诉建议: 400-111-8989
认真做教育 专心促就业
熟练掌握不同的锁的类型与应用方法能够让软件开发程序员在日常工作中满足更多的开发需求,而本文我们就简单来了解一下,软件开发数据库锁的类型与应用。
InnoDB锁
前几期的文章中我们讲过了记录锁(行锁)、间隙锁和临键锁,这里就不再赘述了。接下来我们按照锁的模式讲一下InnoDB里的共享锁、排他锁和意向锁,其中共享锁和排他锁属于行级锁,行级锁都是基于索引项的,如果没有索引项,则添加的是表级锁;意向锁属于表级锁。
共享锁:SharedLocks,简称S锁
若事务T对数据对象A加上S锁,则事务T只能读A;其他事务只能再对A加S锁,而不能加X锁,直到T释放A上的S锁。这就保证了其他事务可以读A,但在T释放A上的S锁之前不能对A做任何修改。可以通过select...lockinsharemode来加共享锁,通过Commit、Rollback来释放锁。
排他锁:Exclusivelock,简称X锁,也叫互斥锁
若事务T对数据对象A加上X锁,则只允许T读取和修改A,其它任何事务都不能再对A加任何类型的锁(排他锁不可与其他锁共存),直到T释放A上的锁。它防止任何其它事务获取资源上的锁,直到在事务的末尾将资源上的原始锁释放为止。可以通过select...forupdate手动加锁,也可以通过增删改操作自动加锁,通过Commit、Rollback来释放锁。
意向锁:IntentionLocks
说起意向锁,大家先来考虑一下这个问题:假设存在两个事务A和B对表test进行操作,先事务A对十行数据加了一把读锁,锁住了该行数据,让这一行只能读,不能写;然后事务B想要对该表加一把表级的写锁,那么事务B能否加锁成功呢?思考两秒钟...答案当然是否定的,即事务B无法加锁成功。如果我们假设它加锁成功的话,那么理论上它就能修改表中的任意一行,这将与事务A持有的行级锁(读锁)产生冲突。而数据库想避免这种冲突的话,就需要将事务B的加锁申请给阻塞住,直到事务A的行锁被释放。
【免责声明】:本内容转载于网络,转载目的在于传递信息。文章内容为作者个人意见,本平台对文中陈述、观点保持中立,不对所包含内容的准确性、可靠性与完整性提供形式地保证。请读者仅作参考。更多内容请加danei0707学习了解。欢迎关注“达内在线”参与分销,赚更多好礼。