本文介绍: 锁是计算机在执行多线程或线程时用于并发访问同一共享资源时的同步机制,MySQL中的锁是在服务器层或者存储引擎层实现的,保证了数据访问的一致性与有效性MySQL锁可以按模式分类为:乐观锁与悲观锁。按粒度分可以分为全局锁、表级锁、页级锁、行级锁按属性可以分为:共享锁(读锁/S锁)、排它锁(写锁/X锁)按状态分为:意向共享锁、意向排它锁按算法分为:间隙锁、临键锁、记录锁。
MySQL之锁
全局锁
应用场景
实现方式
表锁
应用场景
实现方式
元数据锁:
意向锁
如果没有「意向锁」,那么加「独占表锁」时,就需要遍历表里所有记录,查看是否有记录存在独占锁,这样效率会很慢。
那么有了「意向锁」,由于在对记录加独占锁前,先会加上表级别的意向独占锁,那么在加「独占表锁」时,直接查该表是否有意向独占锁,如果有就意味着表里已经有记录被加了独占锁,这样就不用去遍历表里的记录。
AUTO-INC锁
行锁
前面也提到,普通的 select 语句是不会对记录加锁的,因为它属于快照读。如果要在查询时对记录加行锁,可以使用下面这两个方式,这种查询会加锁的语句称为锁定读。
上面这两条语句必须在一个事务中,因为当事务提交了,锁就会被释放,所以在使用这两条语句的时候,要加上 begin、start transaction 或者 set autocommit = 0
行级锁的类型主要有三类:
页级锁
乐观锁
应用场景
实现方式
悲观锁
应用场景
实现方式
死锁
产生死锁的必要条件
如何处理死锁
如何避免死锁
锁的内存结构
锁所在的事务信息
索引信息
表锁/行锁信息
type_mode
其他信息
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。