一、事物的特性

原子性: 同一个事物的多个操作要么同时成功,要么同时失败

一致性: 事物操作前后数据库的数据整体上要保持一致,例如一个转账操作中,A账号转出的钱一定和B账号转入的钱是相等的,两个账号的余额整体上要保持一致。

隔离性: 多个事物操作之间是相互隔离的

持久性

二、事物的隔离级别

多个事物并发操作数据库时会产生一些问题

脏读: 一个事物读取到另一个事物未提交的数据并基于此进行操作,而另一个事物最后回滚了自己的结果,这样第一个事物就会基于错误的结果进行计算。

不可重复读: 事物A在处理过程中多次读取同一个数据,事物B在中间修改了此数据并提交,事物A在第二次读取时就会得到和第一次读取时不一样的结果。

幻读: 幻读针对的是表中数据的整体,假设有一个事物A要把表中所有数据的某一个字段更新成0,当A刚提交完事物B有插入了一条数据,此时在事物A看来有一条数据没有被更新到,就像产生了幻觉一样。

所以幻读针对的是insert/delete这种操作,不可重复读针对的是update操作(在事物执行的间隙对某条数据进行修改)。

为了解决上边的这几种问题,数据库设计了不同的隔离级别。

读未提交: 最低的隔离级别,以上几种问题都存在

读已提交: 可以解决脏读的问题

可重复读: 可以解决脏读和不可重复读,这种情况下一个事物读取了某一行数据后,在其没提交前其他事物就不能再对这条数据进行修改。

串行化: 事物顺序执行,可以解决所有的问题