事务的概念
事务就是对数据操作的一系列指令集合。
事务的四个特性
- 原子性
事务的操作要么全部成功,要么全部失败,如果有一个指令失败,那么事务回滚到初始状态。
- 一致性
事务的执行不能破坏数据的完整性和一致性,比如总额是2000,那么无论怎么转账,总额应该保持不变。
- 持久性
一旦事务被提交了,那么无论停电还是宕机,数据都应该永久保存在数据库中。
- 隔离性
事务的操作应该是独立的,不能被其他事务干扰。
事务的隔离级别
- 读未提交(Read uncommitted)
- 可能导致脏读
假如事务A修改了数据,此时并未提交,事务B读取数据之后事务A回滚了,那么事务B读取错误。
- 可能导致脏读
- 读已提交(READ_COMMITTED)
- 可能导致不可重复读
假如事务A在查询数据,此时事务B修改事务并提交,事务A又来查询数据,此时数据不一致。
- 可能导致不可重复读
- 可重复读(Repeatable read)
- 可能导致幻读
假如事务A将某张表的id从1变为2,此时事务B插入一条id为1的数据并提交,事务A再查询,发现没有全部修改,像是出了幻觉。
- 可能导致幻读
- 串行化(Serializable)
- 不会产生任何问题
MySQL支持四种级别,默认可重复读(Repeatable read)。
Oracle支持读已提交(READ_COMMITTED)和串行化(Serializable)两种类型,默认读已提交。