ACID:指数据库事务正确执行的四个基本要素的缩写。

 

· 原子性(Atomicity)

一个事务必须被视为不可分割的最小工作单元,整个事务中的所有操作要么全部完成,要么全部失败回滚,不可能停滞在中间某个环节。

事务执行过程中发生错误,会被回滚到事务开始前的状态,就像整个事务从来没有执行过一样。

 

原子性由Undo Log日志保证,它记录了需要回滚的日志信息,当事务回滚时撤销已经执行成功的sql。

 

· 一致性(Consistency)

数据库总是从一个一致性状态转换到另一个一致性状态。

事务开始前和事务完成时,数据都必须保持一致状态,数据库的完整性约束没有被破坏。

具体来说就是:比如表和表之间存在外键约束关系,那么你对数据库进行的修改操作就必须要满足约束条件。

即,如果你修改了一张表中的数据,那你还需要修改与之存在外键约束关系的其他表中对应的数据,以达到一致性。

 

一致性一般是由代码逻辑来保证的。

 

· 隔离性(Isolation)

隔离状态执行事务,使它们好像是系统在给定时间内执行的唯一任务。

如果有两个事务运行在相同时间内,执行相同的功能,事物的隔离性将确保每一事务在系统中只有该事务在使用系统。

这种属性有时成为串行化,为了防止事务操作间的混淆,必须使用串行化或者序列化请求,使得在同一时间内仅有一个请求用于同一数据。

 

隔离性由MVCC(多版本并发控制)来保证。

 

· 持久性(Durability)

在事务完成以后,该事务对数据库的所作的更改便持久的保存在数据库中,并不会被回滚。

即使系统出现故障,也能够保持。

 

持久性由内存 + redo log保证,MySQL修改数据同时在内存和redo log记录这次操作。

事务提交的时候通过 redo log刷新磁盘,宕机的时候从redo log恢复。

 

由于一项操作通常会包含许多子操作,而这些子操作可能会因为硬件的损坏或其他因素产生问题,要正确实现ACID并不容易,ACID建议数据库将所有需要更新以及修改的资料一次操作完毕,但实际上不可行。

【SQL】ACID——数据库事务正确执行的四要素
Tagged on:
0 0 投票数
Article Rating
订阅评论
提醒

0 评论
内联反馈
查看所有评论