一、事务的理解
二、事务的特性
三、事务造成的一些问题
四、事务的隔离级别
一、事务的理解
事务是一个程序中的一系列严谨、严密的逻辑操作,是操作数据库的最小单位,由一个或者n个SQL语句组成的逻辑,一般银行会很需要事务,因为事务的特性很符合银行转账的逻辑。
二、事务的特性
1、原子性:
执行一个事务的代码时,如果有一处报错,那么这个事务的所有代码就会执行失败,要么就全部成功,要么就全部不成功,就像一根绳子上的蚂蚱,要么一起死,要么一起活。
2、一致性:
一个事务执行前和执行后必须是一个状态,对于整个数据的完整性要保持稳定。
3、隔离性:
多个事务执行时互不干扰,多个事务并发执行时保持隔离性。
4、持久性:
当一个事务正确执行后,数据库里的数据要是不改变,就永远不改变,要是改变就是永久地改变
三、事务造成的一些问题
1、脏读:
指在一个事务处理过程中读取了别的未提交事务里的数据,例如,小周在网上想买个东西要花五十,他的卡里有五百块,但是小石也在用小周的银行卡买东西准备付款460,于是小周只看见他的余额只有40了,被告知余额不足,小石也因为密码错误而买不了,这就是不可重读。
2、不可重读:
指一个事务在执行时多次查询却返回了不同的值,这是因为在查询间隔被另一个事务改修改了。
3、幻读:
指一个事务执行两次却得到不一样的结果,这是别的事务在这两次查询时修改了数据造成的。
四、事务的隔离级别
1、Read uncommitted:最低级别,任何错误都会发生
2、Read Committed:可避免脏读的发生
3、Repeatable read:可避免脏读和不可重读的发生
4、Serializable:可避免以上三种问题