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 可以自己在业务逻辑里控制不可重复读问题。

浙公网安备 33010602011771号