做网站不实名认证可以吗,mvc网站开发视频,一半招聘网站海报格式都怎么做,搭建平台有哪些平台说法意向锁
意向锁的概念 意向锁是InnoDB自动添加的一种锁#xff0c;不需要用户去干预。 是数据库中的一种表级锁#xff0c;一个事务要给一个资源加锁时#xff0c;必须要先获取到对应类型的意向锁之后#xff0c;才可以给这个资源加上自己想要的共享锁或者排他锁#xff0…意向锁
意向锁的概念 意向锁是InnoDB自动添加的一种锁不需要用户去干预。 是数据库中的一种表级锁一个事务要给一个资源加锁时必须要先获取到对应类型的意向锁之后才可以给这个资源加上自己想要的共享锁或者排他锁不论是行级还是表级的共享/排他锁都是需要先获取到意向共享/排他锁。
意向锁并不是真正的锁而是为了协调事务对表中行的锁定请求而引入的一个概念。
意向锁业的两个类型
意向共享锁Intention Shared LockIS锁: 表示事务有获取到表的表级或行级共享锁的意向。
意向排他锁Intention Exclusive LockIX锁: 表示事务有获取到表的表级或行级排它锁的意向。 注意获取意向锁只是表示事务有获取到共享锁和排它锁的意向意图而不是表示获取了意向锁就是实际锁定了任何行或表。 意向锁是互相兼容的不会互斥。 说明案例
前提
如果事务A需要修改user表的id有索引为 ‘1’ 的数据行则事务A会给这行数据加上一个行级排他锁和一个意向排他锁。
场景一
此时如果事务B想修改user表的name无索引为 ‘张三’ 的数据行则事务B就需要给user表加上表级排他锁但是在获取表级排他锁之前还需要获取意向排他锁然后就发现已经有事务A获取了意向排他锁则事务B可以直接阻塞等待了不再需要往下尝试判断能否获取到表级排他锁。 意向锁通过这种前置判断的操作很好的解决了行锁与表锁共存时的事务隔离性问题。 场景二
此时如果事务B想修改user表的id有索引为 ‘2’ 的数据行则事务B就需要先获取意向排他锁虽然此时事务A已经持有了user表的意向排他锁但是事务B仍旧可以去获取user表的意向排他锁因为 意向锁是互相兼容的不会互相排斥 上文也有说到获取到意向排他锁之后再去判断id为2的数据行是否有共享锁和排他锁发现没有则事务B持有到user表id为2的数据行的行级排他锁。
总结
行表头为事务A已经获取的锁
列表头为事务B能否获取的锁
意向共享锁意向排他锁表级共享锁表级排他锁行级共享锁行级排它锁意向共享锁兼容兼容兼容不兼容兼容不兼容意向排他锁兼容兼容不兼容不兼容不兼容不兼容表级共享锁兼容不兼容兼容不兼容兼容不兼容表级排他锁不兼容不兼容不兼容不兼容不兼容不兼容行级共享锁兼容额外讨论-1兼容不兼容兼容同行不兼容不同行兼容行级排它锁额外讨论-2额外讨论-1不兼容不兼容同行不兼容不同行兼容同行不兼容不同行兼容
额外讨论-1
事务A获取了 意向排他锁 事务B能否获取 行级共享锁 或 行级排他锁 需要继续往下去判断判断事务A的排他锁是表锁还是行锁
如果是表锁则事务B不能再加行级共享锁
如果是行锁则继续判断事务B要加行级共享锁的行是否被事务A或其他事务加了行级排它锁如果加了则事务B不能再加行级共享锁如果这一行没加行级排他锁则事务B可以加上行级共享锁行锁同行不兼容不同行兼容。
额外讨论-2
事务A获取了 意向共享锁 事务B能否获取 行级排他锁 需要继续往下去判断判断事务A的共享锁是表锁还是行锁
如果是表锁则事务B不能再加行级排他锁
如果是行锁则继续判断事务B要加行级排他锁的行是否被事务A或其他事务加了行级共享锁如果加了则事务B不能再加行级排他锁如果这一行没加行级共享锁则事务B可以加上行级排他锁行锁同行不兼容不同行兼容。 关注我我将持续输出Java常用相关技术文章。