事务的基本属性
- 原子性
事务对数据的修改,要么全都执行,要么全都不执行 - 一致性
如:数据的类型必须正确,数据值必须在规定的范围内,等等。 - 隔离性
不能让其他事务看到该事务的中间状态。 - 持久性
事务完成后,对数据库的影响是永久性的。
SQL的四种隔离级别
- Read Uncommitted:读取未提交的数据
- Read Committed:读取已提交数据
- Repeatable Read:可重复读,在一个事务中,对同一个项,确保前后两次读取结果一样。
- Serializable:可序列化,数据库的事务是可串行化执行的。
隔离级别的降低可能导致的异常
- Lost Update:第一类丢失更新:两个事务同时修改一个数据项,但是后一个事务中途失败回滚,则前一个事务已提交的修改都可能丢失。
- Dirty Reads:一个事务读取了另外一个事务更新却没有提交的数据。Read Committed可以解决。
- Non-Repeatable Reads:一个事务对同一数据项的多次读取可能得到不同的结果。Repeatable Read可以解决。
- Second Lost Update problem:第二类丢失更新:两个并发事务同时读取和修改同一数据项,则后面的修改可能使得前面的修改失效。Repeatable Read可以解决。
- Phantom Read:事务执行过程中,由于前面的查询和后面的查询的期间有另一个事务插入数据,后面的查询结果出现了前面查询结果中未出现的数据。Serializable可以解决。