本文将带大家重新详细的了解一下mysql的事务隔离级别
一、事务的基本要素
1、原子性(Atomicity):一个事务(transaction)中的所有操作,要么全部完成,要么全部不完成,不会结束在中间某个环节。事务在执行过程中发生错误,会被回滚(Rollback)到事务开始前的状态,就像这个事务从来没有执行过一样。
2、一致性(Consistency):在事务开始之前和事务结束以后,数据库的完整性没有被破坏。这表示写入的资料必须完全符合所有的预设规则,这包含资料的精确度、串联性以及后续数据库可以自发性地完成预定的工作。
3、隔离性(Isolation):数据库允许多个并发事务同时对其数据进行读写和修改的能力,隔离性可以防止多个事务并发执行时由于交叉执行而导致数据的不一致。事务隔离分为不同级别,包括读未提交(Read uncommitted)、读提交(read committed)、可重复读(repeatable read)和串行化(Serializable)。
4、持久性(Durability):事务处理结束后,对数据的修改就是永久的,即便系统故障也不会丢失。二、概念概述
1、脏读:读到了其他事务未提交的数据,因为数据未提交可能该数据会进行回滚。
2、幻读:事务A插入了某些数据还未进行提交,但是事务B也插入了相同记录的数据并比事务A前提交了,然后在事务A中读取数据,会发现某些数据并未起到作用,而是读到了事务B提交的数据,让用户感觉很魔幻,这种现象叫幻读,通常针对(INSERT)操作。
3、可重复读:指的是在一个事务内,最开始读到的数据和事务结束前的任意时刻读到的同一批数据都是一致的,通常针对(UPDATE)操作。
4、不可重复读:同一事务内,不同时刻读到的数据可能不一样,可能会受到其他事务的影响,比如其他事务改了这批数据提交了,通常针对(UPDATE)操作。-
三、事务隔离级别
1、读未提交(READ UNCOMMITTED)
2、读提交(READ COMMITTED)——写数据会锁住相应的行
3、可重复读(REPEATABLE READ)——加锁方式是next-key 锁,如果检索条件没有索引,更新数据时会锁住整张表,这样可以解决幻读。
4、串行化(SERIALIZABLE)——读写数据都会锁住整张表
-
四、实例讲解
1、读未提交(READ UNCOMMITTED)
2、读提交(READ COMMITTED)
3、可重复读(REPEATABLE READ)
4、串行化(SERIALIZABLE)