事务的概念和ACID特性

事务的概念和ACID特性

什么是事务?

transaction(事务)表示一个不可再分的业务。批量的 DML 语句同时成功或者同时失败.原子性不可再分最基本单元,可以看做一个完整的事件,通常一个事务可以对应一个完整的业务流程

事务中存在的概念:(开启,回滚,提交)事务

关于事务的回滚需要注意:只能回滚 insert、delete 和 update 语句,不能回滚 select(回滚 select 没有任何意义),对于 create、drop、alter 这些无法回滚.

事务只对 DML(数据库操作语言) 【select,insert,update,delete】有效果? 数据库中的事务只有发生了改变才有,为了保持数据一致性。

ACID 特性

原子性(atomictity)

整个事务中的所有操作,必须作为一个单元全部完成(或全部取消)。

undo log (逻辑日志,根据每行记录进行记录)名为回滚日志,是实现原子性的关键.

undo log 记录了回滚需要的信息,当事务执行失败或调用rollback,导致事务需要回滚,便可以利用 undo log 中的信息将数据回滚到修改之前的样子。

一致性(consistency)

在事务开始之前与结束之后,数据库都保持一致状态。从数据库层面,数据库通过原子性、隔离性、持久性来保证一致性。也就是说 ACID 四大特性之中,C(一致性)是目的,A(原子性)、I(隔离性)、D(持久性)是手段,是为了保证一致性,数据库提供的手段.由AID保证C。

但是如果事务中故意写出违反约束的代码,一致性还是无法保证,还必须从应用层角度考虑。从应用层面,通过代码判断数据库数据是否有效,然后决定回滚还是提交数据!

隔离性(lsolation)

一个事务不会影响其他事务的运行。事务的隔离性是利用的是锁和 MVCC 机制。

持久性(Durability)

在事务完成以后,该事务对数据库所作的更改将持久地保存在数据库之中,并不会被回滚。事务的持久性是利用 Innodb 的 redo log。

redo log通常是物理日志,记录的是数据页的物理修改,而不是某一行或某几行修改成怎样怎样,它用来恢复提交后的物理数据页(恢复数据页,且只能恢复到最后一次提交的位置)。

上一篇:略谈事务ACID


下一篇:事务的ACID