Mysql锁机制

表级锁和行级锁

表级锁:开销小,加锁快;不会出现死锁;锁定粒度大,发生锁冲突的概率最高,并发度最低。
​行级锁:开销大,加锁慢;会出现死锁(mysql自动释放死锁);锁定粒度最小,发生锁冲突的概率最低,并发度也最高。

MySIAM存储引擎的锁机制

表共享读锁
表独占写锁

对MyISAM表的读操作,不会阻塞其他用户对同一表的读请求,但会阻塞对同一表的写请求;
对 MyISAM表的写操作,则会阻塞其他用户对同一表的读和写操作;
MyISAM表的读操作与写操作之间,以及写操作之间是串行的

查看表级锁定争夺情况
show status like ‘table%’;
table_locks_waited和table_locks_immediate
如果table_locks_waited较高,说明有着严重的表级锁征用情况

InnoDB存储引擎的锁机制

事务
事务是由一组SQL语句组成的逻辑处理单元,事务具有4属性,通常称为事务的ACID属性。
原子性(Actomicity):事务是一个原子操作单元,其对数据的修改,要么全都执行,要么全都不执行。(undo log)
一致性(Consistent):在事务开始和完成时,数据都必须保持一致状态。
隔离性(Isolation):数据库系统提供一定的隔离机制,保证事务在不受外部并发操作影响的“独立”环境执行。
持久性(Durable):事务完成之后,它对于数据的修改是永久性的,即使出现系统故障也能够保持。(redo log)

脏读: 一个事务正在对一条记录做修改,在这个事务并提交前,这条记录的数据就处于不一致状态;这时,另一个事务也来读取同一条记录,如果不加控制,第二个事务读取了这些“脏”的数据,并据此做进一步的处理,就会产生未提交的数据依赖关系。这种现象被形象地叫做“脏读”

不可重复读:一个事务在读取某些数据已经发生了改变、或某些记录已经被删除了!这种现象叫做“不可重复读”。

幻读: 一个事务按相同的查询条件重新读取以前检索过的数据,却发现其他事务插入了满足其查询条件的新数据,这种现象就称为“幻读”

在这里插入图片描述

共享锁(s):读锁 (lock in share mode)
排他锁(x):写锁 (for update)允许获取排他锁的事务更新数据,阻止其他事务取得相同的数据集共享读锁和排他写锁。
意向共享(IS)/排他(IX)锁:要给数据行加入相应的读锁/写锁时,首先要取得该表的意向共享/排他锁
自增锁:针对自增列自增长的一个特殊的表级别锁。show variables like ‘innodb_autoinc_lock_mode’;默认值1,代表连续,事务未提交则id永久丢失

行锁实现方式
InnoDB行锁是通过给索引上的索引项加锁来实现的。InnoDB这种行锁实现特点意味着:只有通过索引条件检索数据,InnoDB才使用行级锁,否则,InnoDB将使用表锁!

1、创建带索引的表进行条件查询,innodb使用的是行锁
2、由于mysql的行锁是针对索引加的锁,不是针对记录加的锁。所以如果没有使用索引,虽然是访问不同行的记录,但是依然无法访问到具体的数据,由行锁退化为表锁

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值