事务的特性:acid
a:原子性:事务是一个不可分割的执行单元,事务中的操作要么全都执行,要么全都不执行
c:一致性:事务必须使数据库从一个一致性状态变换到另一个一致性状态,也就是说一个事务执行之前和执行之后都必须处于一致性状态(允许中间状态,只关心始终)
i:隔离性:事务的执行是相互独立的,它们不会相互干扰,一个事务不会看到另一个正在运行过程中的事务的数据,
d:持久性:一个事务完成之后,事务的执行结果必须是持久化保存的,即使数据库发生崩溃,在数据库恢复后事务提交的结果仍然不会丢失
原子性和一致性的区别:
原子性:比如a向b转账,a扣钱,b加钱,要么都成功了,要么都失败了
一致性:比如a和b的钱加起来是5000,不管a,b如何转账,转几次账,事务结束后两个用户的钱相加起来还是5000块
原子性并不能完全保证一致性,一致性是最基本的属性,其他的三个属性都为了保证一致性而存在
所谓一致性,指的是数据处于一种有意义的状态,最常见的例子是转帐。例如从帐户A转一笔钱到帐户B上,如果帐户A上的钱减少了,而帐户B上的钱却没有增加,那么我们认为此时数据处于不一致的状态。为了保证这个一致性,所以需要原子性
为了实现原子性,需要通过日志,将所有对数据库的更新操作都写入日志,如果一个事务中的一部分操作已经成功,但以后的操作,由于断电/系统奔溃/其他的软硬件错误而无法继续,则