1. 事务的四个特性(ACID)
①原子性:每个事务是一个整体,不可再拆分,事务中所有SQL语句要么都执行,要么都不执行.
②一致性:事务执行前后,数据库状态不变.(比如两人转账,事务执行前后总金额不会变)
③隔离性:事务和事务之间不能相互影响,执行时保持隔离状态.
④持久性:事务一旦提交成功,则影响是持久的.
2. 并发访问带来的三种问题
①脏读:A事务读到B事务中未提交的数据
②不可重复读:A事务读取两次同一个数据,数据不一样.期间被B修改了
③幻读:A事务读取两次,两次的数据量不同,期间被B删除或者增加了
3. 事务的隔离级别
说明:是表示该级别会出现该问题,否表示该级别不会出现该问题
级别 | 名字 | 隔离级别 | 脏读 | 不可重复度 | 幻读 |
---|---|---|---|---|---|
1 | 读未提交 | read uncommitted | 是 | 是 | 是 |
2 | 读已提交 | read committed | 否 | 是 | 是 |
3 | 可重复度 | repeatable read | 否 | 否 | 是 |
4 | 串行化 | serializable | 否 | 否 | 否 |
①读未提交:A事务可以读取到B事务已经修改但是没提交的数据,会引起脏读,不可重复度,幻读三种问题.
②读已提交:A事务对数据进行了修改,B事务在A事务未修改数据前开启的,B事务读到的数据是A修改之前的 数据,A提交事务后,修改的数据才生效.
③可重复读:一个事务执行过程中看到的数据,总是跟这个事务在启动时看到的数据是一致的。当然在可重复读隔离级别下,未提交变更对其他事务也是不可见的。
如:A事务运行,B事务对数据修改后提交,也不能改变A事务已经读的数据.
④串行化:A事务运行,B不能增删操作.当A事务提交之后,B事务的增删才能运行.
3. 事务的默认隔离级别
mysql:可重复度
oracle:读已提交
SQL server 读已提交