当前位置:   article > 正文

mysql事务和锁_mysql的事务与锁毫秒

mysql的事务与锁毫秒

1.mysql四事务隔离级别

  • read uncommitted(未提交读):在read uncommitted级别,事务中的修改,即使没有提交,对其他事务也都是可见的。性能上不比其他的级别好很多,并且会导致很多问题的产生,实际中很少使用。

  • read committed(提交读/不可重复读):一个事务从开始直到提交之前,所做的任何修改对其他事务都是不可见的。

  • repeatbale read(可重复读):mysql默认隔离级别,在同一个事务中多次读取同样记录的结果是一致的。可能会造成幻读,但结合MVCC可以解决幻读问题。

  • serializable(可串行化):最高的隔离级别,在读取的每一行数据上都加锁,导致大量的超时和的锁争用的问题,实际很少用

2.不同事务级别产生的影响

隔离级别脏读不可重复读幻读加锁读
read uncommitted×
read committed××
repeatbale read×××
serializable×××
## 查看事务日志是否开启

## mysql默认采用自动提交模式。如果不是显式地开始一个事务,则每个查询都被当做一个事务执行提交操作。
show variables like 'autocommit';

## 设置当前会话事务日志隔离级别
set transaction isolation level read committed;

## 查看当前默认隔离级别
select @@tx_isolation;
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

3.mysql的锁

a.根据不同方式进行分类:
1)加锁机制:乐视和悲观
2)兼容性:共享和排他
3)锁粒度:表锁,页锁,行锁
4)锁模式:记录锁,gap锁,next-key锁,意向锁,插入意向锁

b.锁概念解析:

  • 读锁(共享锁):不能写可并行读
  • 写锁(排他锁):读写阻塞,在增删改的时候回加上写锁。innodb存储引擎下只select不加任何锁
  • 间隙锁:Gap Locks和Next-Key Locks。Gap Locks锁住两个索引之间的区间;Next-Key Locks是Gap Locks+Record Locks形成闭区间。
  • 行锁:锁定当前数据行,粒度小,加锁慢,发生锁冲突的概率小,并发度高
  • 表锁:阻塞写,不阻塞读。锁定当前表,粒度大,加锁快,开销小,发生锁冲突的概率大,并发度低。
  • 死锁:指两个或多个的事务在同一资源上相互的占用,并请求锁定对方占用的资源,导致恶性循环的现象。

c.间隙锁介绍:

间隙锁:

  • 最简单的行锁,仅仅锁住一行
  • 记录锁永远都是加在索引上的,即便表没有索引,innodb也会隐式的创建一个索引,并使用这个索引实施记录锁
  • 会阻塞其他事务对其的增删改

Gap Locks

  • 间隙锁是一种加在两个索引之间的锁, 或者加在第一个索引之前,或者最后一个索引之间的间隙
  • 使用间隙锁住的是一个区间
  • 间隙锁只阻止其他事务插入到间隙中,而不会阻止其他事务在同一个间隙上获得间隙锁,因此,gap x lock和gap s lock有相同作用的

Next-Key锁

  • 记录锁和间隙锁的组合,它指的是加在某条记录以及这条记录前面间隙上锁

4.innodb的意向锁

  • 意向共享锁(IS):当一个事务在获取资源需要加共享锁定时,遇到已经被其他排他锁占用的时候,该事务则可以在该表上加意向锁,即意向共享锁
  • 意向排他锁(IX):当一个事务在获取资源需要加排他锁定时,遇到已经被其他排他锁占用的时候,该事务则可以在该表上加意向锁,即意向排他锁
  • 意向锁是表级别的锁定。意向共享锁可以同时并存多个,但意向排他锁只能存在一个
  • 意向锁是innodb自动添加的,不需要用户干预

5.锁共存的逻辑关系

共享锁排他锁意向共享锁意向排他锁
共享锁兼容冲突兼容冲突
排他锁冲突冲突冲突冲突
意向共享锁兼容冲突兼容兼容
意向排他锁冲突冲突兼容兼容

1.InnoDB目前处理死锁的方法是将持有最少行级排他锁的事务进行回滚。

2.InnoDB采用的是两阶段锁定协议(two-phase locking protocol):在事务执行过程中,随时都可以执行锁定,锁只有的再执行commit或者rollback时才会释放,并且是所有的锁在同一时刻被释放。InnoDB会根据隔离级别在需要的时候自动加锁。

注意:除了事务中禁用了autocommit可以使用lock tables外,其他任何时候都不要显式地执行lock tables,不管使用的是什么存储引擎。

##显式锁定
select … lock in share mode
select … for update

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/喵喵爱编程/article/detail/959675
推荐阅读
相关标签
  

闽ICP备14008679号