事务:直白的说就是一系列操作在外界看来就是一件事(只有两种状态:做好了/没做,不与其他事有瓜葛)。其特性ACID分别是:原子性、一致性、隔离性、持久性。
原子性:一系列操作不可分割,要么全做完,要么全部不做。
一致性:本地事务的一致性与分布式事务的一致性存在一定差异,对于本地事务的一致性一般的解释是满足数据完整性约束(这些与我们的业务有关,例如数据库的级联删除,在事务中我们应该保证我们该做的事都做了,而不是在事务之外去执行与该事物相关的数据操作),对此我还是有些困惑。
隔离性:事务之间的隔离性,避免交叉事务造成数据的不一致性(分布式事务的一致性与此有点类似,但是造成不一致的原因不同)。例如a事件、b事件都对数据d进行操作,a查询d得知d=100,然后b查询d得知d=100,a改变d=d+100,b改变d=d+200,我们的预期是d=100+100+200=400,然而由于并发,如果a事件与b事件交叉执行的话,结果可能是200、300、400。并发导致的问题有:脏读、不可重复读、幻读。mysql对于隔离级别分为多种:读未提交、读提交、重复读、序列化。