写点什么

mysql 之事务

作者:周杰伦本人
  • 2022 年 9 月 05 日
    贵州
  • 本文字数:692 字

    阅读完需:约 2 分钟

mysql 之事务

在处理并发读或者写的时候,可以通过实现一个由两种类型的锁组成的锁系统来解决问题,共享锁和排他锁,也叫读锁和写锁


读锁是共享的,相互不阻塞。多个客户在同一时刻可以同时读取同一个资源,互不干扰


写锁是排他的,一个写锁会阻塞其他的写锁和读锁。


按照锁的粒度分为表锁和行锁


表锁是锁住整张表


行锁只在存储引擎层实现,mysql 服务器层没有实现。


事务的四个特性:


  • 原子性(atomicity):一个事务必须被视为不可分割的最小单元,整个事物的所有操作要么全部提交,要么全部失败回滚

  • 一致性(consistency):数据库从一个一致性状态转换到另一个一致性状态,不会出现错账丢账等。。

  • 隔离性(isolation):一个事务所做的修改在最终提交之前,对其他事务是不可见的

  • 持久性(durability):一旦事务提交,所做的修改都会保存到数据库中。


事务的隔离级别:


读未提交:事务修改没有提交,对其他事务是可见的。**事务可以读取未提交的数据称为脏读。**一般这种隔离级别很少用


读已提交:事务从开始到提交之前,所做的修改对其他事务是不可见的。同一事务下执行两次查询,另一个事务对数据修改提交事务前后,该事务查询可能得到的结果不同,这种状况叫不可重复读。


可重复读:通过 MVCC 解决不可重复读问题,MVCC 记录每行数据的版本,整个事务读取整个版本的数据,实现可重复读,在读的时候不加锁,读写,写读同时进行,写写的时候阻塞。**所谓幻读,指的是当某个事务在读某个范围内的记录时,另一个事务插入一条数据,产生幻行。**利用间隙锁来解决幻读的问题。可重复读是 Mysql 默认事务隔离级别。


串行化:强制事务串行执行,在读取的每一行数据上都加锁,可能导致大量的超时和锁竞争,一般不用。



发布于: 1 小时前阅读数: 11
用户头像

还未添加个人签名 2020.02.29 加入

公众号《盼盼小课堂》,多平台优质博主

评论

发布
暂无评论
mysql之事务_9月月更_周杰伦本人_InfoQ写作社区