事务的状态:开始,提交,回滚。
- 事物A和事物B之间具有一定的隔离性
- 隔离性有隔离级别(4个)
- 读未提交:read uncommitted
- 读已提交:read committed
- 可重复读:repeatable read
- 串行化:serializable
理解:
隔离是相对于多个事务的执行来说的,也就是线程并发时所进行的处理。
1.读未提交:read uncommitted
多个事务同时执行的时候,相互之间是透明的。事务a修改的数据会被事务b拿去接着处理,如果最后事务a回滚了,那么事务b处理的就是脏数据(错误数据)。
A-start A update B-start B read B-end A rollback or update A-end
2.read committed 读已提交
不可重复读相对于本事务(A)来说 其他事务(B)做了修改,不可重复读就是读到了被修改了的数据,即两次读的数据不一样
A修改 B修改A-start A read B-start B update B-end A-update(此时数据已经不一致了) A-end
问题:
可能出现不可重复读、幻读,大多数数据库默认级别(SQL Server Oracle)
3.可重复读:repeatable read
当前事务执行期间对其他并行的事务所处理的数据是不可见的。
4.串行化:serializable
所有并行事务排队执行。
参考:
https://blog.csdn.net/gwnszbd/article/details/79614935
https://blog.csdn.net/w_linux/article/details/79666086
如果错误,欢迎指正。