联系型数据库都会有ACID(数据库业务正确履行的四个基本要素的缩写)
关于联系型数据库与非联系型数据库的常识请观看笔者的:https://blog.csdn.net/weixin_43606158/article/details/91060443
ACID其间包括:原子性,共同性,阻隔性,耐久性。一个支撑业务的数据库,必需求具有这四种特性,否则在业务进程傍边无法保证数据的正确性,买卖进程或许达不到买卖方的要求。
原子性
整个业务中的一切操作,要么悉数完结,要么悉数不完结,不或许阻滞在中心某个环节。业务在履行进程中发作过错,会被回滚(Rollback)到业务开端前的状况,就像这个业务从来没有履行过相同。
共同性
一个业务能够封装状况改动(除非它是一个只读的)。业务有必要始终保持体系处于共同的状况,不论在任何给定的时刻并发业务有多少。
也便是说:假如业务时并发多个,体系也有必要如同串行业务相同操作。其主要特征是保护性和不变性,以转账事例为例,假设有五个账户,每个账户余额是100元,那么五个账户总额是500元,假如在这个5个账户之间同时发作多个转账,不管并发多少个,比如在A与B账户之间转账5元,在C与D账户之间转账10元,在B与E之间转账15元,五个账户总额也应该仍是500元,这便是保护性和不变性。
阻隔性
阻隔状况履行业务,使它们如同使体系在给守时刻内履行的仅有操作。假如有俩个业务,运行在相同的时刻内,履行相同的功用,业务的阻隔性将保证每一业务在体系中使命只要该业务在运用体系。这种特点有时称为串行化,为了避免业务操作间的混杂,有必要串行化或序列化恳求,使得在同一时刻仅有一个恳求用于同一数据。
耐久性
在业务完结今后,该业务对数据库所作的更改便耐久的保存在数据库之中,并不会被回滚。
由于一项操作通常会包括许多子操作,而这些子操作或许会由于硬件的损坏或其他要素发作问题,要正确完成ACID并不简单。ACID主张数据库将一切需求更新以及修正的材料一次操作结束,但实际上并不可行。
现在主要有两种方法完成ACID:第一种是Write ahead logging,也便是日志式的方法(现代数据库均根据这种方法)。第二种是Shadow paging。
相对于WAL(write ahead logging)技能,shadow paging技能完成起来比较简单,消除了写日志记载的开支康复的速度也快(不需求redo和undo)。shadow paging的缺陷便是业务提交时要输出多个块,这使得提交的开支很大,并且以块为单位,很难应用到答应多个业务并发履行的状况——这是它丧命的缺陷。
WAL 的中心思想是对数据文件 的修正(它们是表和索引的载体)有必要是只能发作在这些修正现已 记载了日志之后 – 也便是说,在日志记载冲刷到永久存储器之后. 假如咱们遵从这个进程,那么咱们就不需求在每次业务提交的时分 都把数据页冲刷到磁盘,由于咱们知道在呈现溃散的状况下, 咱们能够用日志来康复数据库:任何没有附加到数据页的记载 都将先从日志记载中重做(这叫向前翻滚康复,也叫做 REDO) 然后那些未提交的业务做的修正将被从数据页中删去 (这叫向后翻滚康复 - UNDO)。