MySQL进阶-锁机制

概述

在这里插入图片描述

锁分类

操作

读锁(共享锁):针对同一份数据,多个读操作可以同时进行而不会互相影响。

写锁(排它锁):当前写操作没有完成前,它会阻断其他写锁和读锁。

粒度

表锁(偏读)
	偏向MyISAM存储引擎,开销小,加锁快;无死锁;锁定粒度大,
	发生锁冲突的概率最高,并发度最低。

行锁()
	偏向InnoDB存储引擎,开销大,加锁慢;会出现死锁;锁定粒度最小,
	发生锁冲突的概率最低,并发度也最高。

表锁

#查看锁
show open tables;

#表上锁
lock table mylock read;

#解锁
unlock tables;


session1读锁表mylock
session1不能更改表,也不能访问其他没有加锁的表
session2可以访问任何表,但更改该表进入阻塞状态,直到session1解锁。

在这里插入图片描述
在这里插入图片描述

session1加写锁表
session1自己可以读,写
session2不可以读写该表

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

行锁

InnoDB存储引擎默认事务可重复读,行锁

偏向InnoDB存储引擎,开销大,加锁慢;会出现死锁;锁定粒度最小,
发生锁冲突的概率最低,并发度也最高。

InnoDB与MyISAM的最大不同有两点:
一是支持事务(TRANSACTION);
二是采用了行级锁

事务是由一组SQL语句组成的逻辑处理单元,事务具有以下4个属性,通常简称为事务的ACID属性。 
l 原子性(Atomicity):事务是一个原子操作单元,其对数据的修改,要么全都执行,要么全都不执行。 
l 一致性(Consistent):在事务开始和完成时,数据都必须保持一致状态。这意味着所有相关的数据规则都必须应用于事务的修改,以保持数据的完整性;事务结束时,所有的内部数据结构(如B树索引或双向链表)也都必须是正确的。 
l 隔离性(Isolation):数据库系统提供一定的隔离机制,保证事务在不受外部并发操作影响的“独立”环境执行。这意味着事务处理过程中的中间状态对外部是不可见的,反之亦然。 
l 持久性(Durable):事务完成之后,它对于数据的修改是永久性的,即使出现系统故障也能够保持。 

在这里插入图片描述

开始时都设置autocommit=0;
默认的事务隔离级别为可重复读
session1可以看到自己已修改但未提交的数据,
session2读取不到

若autocommit=1时,则查询的数据为最新提交的。

在这里插入图片描述


session1更新id为1
session2更新id也为1,则session2会阻塞,直到session1提交

若session更新id不同,则相互无影响

在这里插入图片描述

索引失效行锁变表锁

如果执行sql时,条件出现类型转换索引失效,行锁会变表锁

 Session_1Session_2正常情况,各自锁定各自的行,互相不影响,
 一个2000另一个3000由于在column字段b上面建了索引,
 如果没有正常使用,会导致行锁变表锁比如没加单引号导致索引失效,
 行锁变表锁被阻塞,等待。只到Session_1提交后才阻塞解除,完成更新
 

在这里插入图片描述

间隙锁

在这里插入图片描述
在这里插入图片描述

如何锁定一行

在这里插入图片描述
在这里插入图片描述

行锁总结

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
MySQL事务与机制是数据库管理系统中重要的概念。事务是一组数据库操作(例如插入、更新、删除等)的执行单元,要么全部成功执行,要么全部回滚。机制用于管理并发访问数据库时的数据一致性和并发控制。 在MySQL中,事务由以下四个特性组成,通常简称为ACID: 1. 原子性(Atomicity):事务中的操作要么全部完成,要么全部回滚,不存在部分完成的情况。 2. 一致性(Consistency):事务开始和结束时,数据库的状态必须是一致的。即事务执行前后,数据库中的数据必须满足预定义的完整性约束。 3. 隔离性(Isolation):并发执行的事务之间相互隔离,一个事务的执行不应该受其他事务的影响。 4. 持久性(Durability):一旦事务提交,其结果应该永久保存在数据库中,即使发生系统故障也不会丢失。 MySQL中的机制用于控制对数据的并发访问。主要有两种类型的:共享(Shared Lock)和排他(Exclusive Lock)。共享允许多个事务同时读取同一数据,但不允许并发写操作。排他则只允许一个事务独占地行读写操作。 MySQL提供了多种级别的,包括表级、行级和页面。表级是最粗粒度的,对整个表行加;行级是最细粒度的,只对操作的行行加;页面介于表级和行级之间,对一定范围的行行加。 通过合理使用事务和机制,可以确保数据库的数据一致性和并发控制,避免脏读、不可重复读和幻读等问题。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值