mysql事务隔离级别

一、事务的特征:

  1、原子性(Atomicity):事务开始后所有操作,要么全部做完,要么全部不做,不可能停滞在中间环节。事务执行过程中出错,会回滚到事务开始前的状态,所有的操作就像没有发生一样。也就是说事务是一个不可分割的整体,就像化学中学过的原子,是物质构成的基本单位。

   2、一致性(Consistency):事务开始前和结束后,数据库的完整性约束没有被破坏 。比如A向B转账,不可能A扣了钱,B却没收到。

   3、隔离性(Isolation):同一时间,只允许一个事务请求同一数据,不同的事务之间彼此没有任何干扰。比如A正在从一张银行卡中取钱,在A取钱的过程结束前,B不能向这张卡转账。

   4、持久性(Durabilit



y):事务完成后,事务对数据库的所有更新将被保存到数据库,不能回滚。

二、事务之间会出现的问题

  1、脏读:事务A读取了事务B无提交更新或插入的数据,然后B回滚操作,那么A读取到的数据是脏数据。

  2、不可重复读:事务 A 多次读id=1的数据,事务 B 在事务A多次读取的过程中,对数据id=1作了更新并提交,导致事务A多次读取同一数据时,结果 不一致。

  3、幻读:事务A查询记录数,事务B新增或者删除了数据,导致结果数不一致这就叫幻读

三、事务隔离级别介绍

  • 读未提交(Read Uncommitted)  这种事务隔离级别下,select语句不加锁,不作限制,以上三个问题都会出现。
  • 读提交(Read Committed, RC)  事务提交后才会被读到更新的数据,会锁住行,不会出现脏读,会出现不可重复读。
  • 可重复读(Repeated Read, RR) 如果检索条件有索引(包括主键索引)的时候,默认加锁方式是next-key 锁;如果检索条件没有索引,更新数据时会锁住整张表。一个间隙被事务加了锁,其他事务是不能在这个间隙插入或删除记录的,这样可以防止幻读。
  • 串行化(Serializable) 读和写都会锁表。
  • mysql Innodb默认是RR  用最多的是RC 可以自己在业务逻辑里控制不可重复读问题。

 

posted @ 2019-09-19 09:30  脑子开窍的晚  阅读(109)  评论(0)    收藏  举报