数据库ACID

ACID:

A(Atomicity)原子性:事务中有多个操作,要么全部发生,要么全部不发生。

 

C(Consistency)一致性:

Consistency ensures that a transaction can only bring the database from one valid state to another, maintaining database invariants: any data written to the database must be valid according to all defined rules, including constraints, cascades,triggers, and any combination thereof. This prevents database corruption by an illegal transaction, but does not guarantee that a transaction is correct.
翻译过来:
一致性确保事务只能将数据库从一种有效状态带到另一种有效状态,维护数据库不变性:写入数据库的任何数据必须根据所有定义的规则(包括约束、级联、触发器以及它们的任何组合)有效。这可以防止非法事务破坏数据库,但不能保证事务是正确的。
“This prevents database corruption by an illegal transaction, but does not guarantee that a transaction is correct. ” 这又怎么理解呢?在数据库的角度来看,它只关心 transaction 符不符合定义好的规则,符合的就是legal的,不符合的就是illegal的。transaction 是否正确是从应用层的角度来看的,数据库并不知道你应用层的逻辑意义,它不保证应用层的transaction的正确性,这个逻辑正确性是由应用层的programmer来保证的。
 
来源:如何理解数据库事务中的一致性的概念? - sleep deep的回答 - 知乎 https://www.zhihu.com/question/31346392/answer/569142076

 

I(Isolation)隔离性:多个事务并发时,如果不同事务操作同一个数据时,每个事务都有各自的完整数据空间。事务查看数据更新时,数据所处的状态要么是另一事务修改它之前的状态,要么是修改之后的状态。mysql利用加锁、阻塞来保证隔离性。

 

D(Durability)持久性:意味着在事务完成以后,该事务所对数据库所作的更改便持久的保存在数据库之中,并不会被回滚。一旦事务提交,数据会被持久化保存在数据库中。SQL SERVER通过write-ahead transaction log来保证持久性。write-ahead transaction log的意思是,事务中对数据库的改变在写入到数据库之前,首先写入到事务日志中。而事务日志是按照顺序排号的(LSN)。当数据库崩溃或者服务器断点时,重启动SQL SERVER,SQLSERVER首先会检查日志顺序号,将本应对数据库做更改而未做的部分持久化到数据库,从而保证了持久性。

参考:https://www.cnblogs.com/lichunyang321/p/9594196.html

 

posted @ 2020-03-11 23:10  NeoZy  阅读(190)  评论(0编辑  收藏  举报