您好,欢迎来到筏尚旅游网。
搜索
您的当前位置:首页理解mysql的事务和锁机制

理解mysql的事务和锁机制

来源:筏尚旅游网

1.什么是数据库的事务

   事务:数据库操作的最小工作单元,是作为单个逻辑工作单元的一系列操作, 事务时一组不可在分割的操作集合,一系列操作要么一起成功,要么一起失败。

  事务的四大特性:ACID
    原子性:一系列操作的不可再分割。
    一致性:数据的一致性。
    隔离性:不同的事务操作相同数据的时候时相互隔离的,互不干扰  。
    持久性:数据的修改是持久性的,永久保存。

 数据库默认开启事,在mysql数据库中手动开启事务 begin / start transation,提交 commit,回滚 rollback

  查看隔离级别    show global variables like "tx_isolation"
   set session autocommit=on/off  事务是否自动启动

2.事务并发会带来什么问题
   脏读:事务中读取到另一事务未提交的数据。
   不可重复读:事务中,同一条件下多次读取的数据不一致,其它事务对同一数据修改。
   幻读:事务中,同一条件下多次读取的数据不一致(数据的数量不一致),其它事务进行插入操作。
   事务并发的三大问题都是数据库读一致性问题
3. 事务的隔离级别
    读未提交( read Uncommited):事务未提交的数据对其他事务是可见的,隔离级别最低。
    读已提交 (read commited):一个事物开始之后,只能看到已提交的事务所作的修改,解决脏读问题。
    可重复读 (repeatable read):多次读取数据一致,解决不可重复读问题。
    串行化  serializeble:所有事务按序执行,不能并发执行,隔离级别最高,效率最低。解决所有问题。

    在mysql中INNODB存储引擎中,在可重复读隔离级别下(RR),采用间隙锁行锁算法,解决幻读问题。

  隔离级别的实现方式:1.LBCC  依赖于锁机制实现  2.MVCC  生成一个数据请求事件点的一致性数据快照
   并用这个快照提供一定级别的一致性读取

4.锁的原理与算法详解

  数据库的锁: 用来管理不同事务对共享资源的并发访问

   表锁和行锁的区别
     锁定粒度: 表锁 > 行锁
     加锁效率: 表锁 > 行锁
     冲突概率: 表锁 > 行锁
     并发性能: 表锁 <行锁

   MyISAM只支持表锁 ,INNODB支持行锁 表锁

共享锁(行锁):又称为读锁,简称s锁,多个事务对同一数据可以共享一把锁,都能访问到数据 但是只能读,不能修改。
                          语法: select * from table  where id =1  lock in share mode
排他锁(行锁):又称为写锁 排他锁不能与其他锁并存,事务获取到数据的排它锁,其他事务就不能获取该数据的

                          任何锁。 select * from table  where id =1  for  update
意向共享锁(表锁),意向排他锁(表锁):当行数据加共享锁或者排它锁的时候,首先会给表加意向锁。
意向锁作为一个标记,当事务想要对表加表锁时,首先会检查有无意向锁,无意向锁代表表中的任何一行记录都没有加锁,有意向锁代表表中数据加了锁,事务阻塞等待,行锁释放之后在加表锁。
为什么要加意向锁:提高加表锁的效率

锁的原理:行锁实际上锁定的是索引,不是数据
 1.不使用索引: 不使用索引的情况下,给行加锁时,会锁定整张表
 2主键索引:给行数据加锁时,不会锁定整张表,锁定行数据。
行锁算法:锁定了什么范围

  记录锁:锁定的是某一行记录
  间隙锁:锁定的是区间(左右都是开区间) 间隙锁之间不冲突
  临键锁:锁定的是区间(左开右闭的区间)

默认行级算法是临键锁,当使用范围或者等值查找命中不到数据时,降为间隙锁。

 

脏读问题解决:可以在修改的事务中加排它锁  不允许其它事务读取,提交之后才会释放排它锁。
   
不可重复读问题解决:在读取数据的时候加共享锁,其它事务修改操作(排它锁)等待共享锁的释放。

幻读:采用间隙锁,锁定整个区间,其它事务在这个区间的操作都会阻塞。

 

 

 

感觉写的非常乱,为自己所学做一个整理,下次再详细补充。

 

 

 


 

 

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- efsc.cn 版权所有 赣ICP备2024042792号-1

违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务