1、数据库事务四大特性(ACID---首字母缩写):
* 原子性:atomicity 一个事务操作是不可分割的整体,一个事务中的操作一定是要么全部成功,要么全部失败的。
* 一致性:consistency 一个事务执行前后,数据库的状态是一致的。A100 B100----------> A90 B110
* 隔离性:isolation 当多个事务同时执行的时候,互相是不会产生影响的。
* 持久性:durability 当事务执行完毕之后,其对数据库产生的影响一定会持久的保存在磁盘上。
2、事务隔离性带来的问题
在并发事务没有进行隔离的情况下,会发生如下问题:
* 脏读:一个事务读取到了另外一个事务没有提交的数据
* 不可重复读:一个事务读取到了另外一个事务修改的数据(修改)
* 幻读(虚读):一个事务读取到了另外一个事务新增的数据(新增)
3、事务隔离级别
MySQL提供了事务隔离级别来解决这些问题。在MySQL中共支持四种隔离级别,分别是:
级别 名字 隔离级别 脏读 不可重复读 幻读 数据库默认隔离级别 1 读未提交 read uncommitted 是 是 是 2 读已提交 read committed 否 是 是 Oracle 3 可重复读 repeatable read 否 否 是 MySQL 4 串行化 serializable 否 否 否
读取未提交 : 最低的隔离级别,允许读取尚未提交的数据变更,可能会导致脏读、幻读或不可重复读 。读取已提交 : 允许读取并发事务已经提交的数据, 可以阻 止脏读,但是幻读或不可重复读仍有可能发生 。可重复读 : 对同一字段的多次读取结果都是一致的,除非数据是被本身事务自己所修改,可以阻止脏读和不可重复读,但幻读仍有可 能发生 。可串行化 : 最高的隔离级别,完全服从 ACID 的隔离级别。所有的事务依次逐个执行,这样事务之间就完全不可能产生干扰,也就是说,该级 别可以防止脏读、不可重复读以及幻读 。
事务隔离级别越严格,数据库效率越低。 MySQL 默认的事务隔离级别是:REPEATABLE-READ 级别,简称 RR 级别