数据库事务正确执行的四个基本要素包括
ACID,指数据库事务正确执行的四个基本要素的缩写。包含:原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)、持久性(Durability)。一个支持事务(Transaction)的数据库,必需要具有这四种特性,否则在事务过程(Transaction processing)当中无法保证数据的正确性,交易过程极可能达不到交易方的要求。原子性
整个事务中的所有操作,要么全部完成,要么全部不完成,不可能停滞在中间某个环节。事务在执行过程中发生错误,会被回滚(Rollback)到事务开始前的状态,就像这个事务从来没有执行过一样。
一致性
一个事务可以封装状态改变(除非它是一个只读的)。事务必须始终保持系统处于一致的状态,不管在任何给定的时间并发事务有多少。
也就是说:如果事务是并发多个,系统也必须如同串行事务一样操作。其主要特征是保护性和不变性(Preserving an Invariant),以转账案例为例,假设有五个账户,每个账户余额是100元,那么五个账户总额是500元,如果在这个5个账户之间同时发生多个转账,无论并发多少个,比如在A与B账户之间转账5元,在C与D账户之间转账10元,在B与E之间转账15元,五个账户总额也应该还是500元,这就是保护性和不变性
隔离性
隔离状态执行事务,使它们好像是系统在给定时间内执行的唯一操作。如果有两个事务,运行在相同的时间内,执行相同的功能,事务的隔离性将确保每一事务在系统中认为只有该事务在使用系统。这种属性有时称为串行化,为了防止事务操作间的混淆,必须串行化或序列化请求,使得在同一时间仅有一个请求用于同一数据。
持久性
在事务完成以后,该事务对数据库所作的更改便持久的保存在数据库之中,并不会被回滚。
由于一项操作通常会包含许多子操作,而这些子操作可能会因为硬件的损坏或其他因素产生问题,要正确实现ACID并不容易。ACID建议数据库将所有需要更新以及修改的资料一次操作完毕,但实际上并不可行。
目前主要有两种方式实现ACID:第一种是Write ahead logging,也就是日志式的方式(现代数据库均基于这种方式)。第二种是Shadow paging。
绛旓細ACID锛鎸囨暟鎹簱浜嬪姟姝g‘鎵ц鐨勫洓涓熀鏈绱犵殑缂╁啓.鍖呭惈:鍘熷瓙鎬(Atomicity锛夈佷竴鑷存э紙Consistency锛夈侀殧绂绘э紙Isolation锛夈佹寔涔呮э紙Durability锛銆備竴涓敮鎸佷簨鍔★紙Transaction锛夌殑鏁版嵁搴撶郴缁燂紝蹇呴渶瑕佸叿鏈夎繖鍥涚鐗规э紝鍚﹀垯鍦ㄤ簨鍔¤繃绋嬶紙Transaction processing锛夊綋涓棤娉曚繚璇佹暟鎹殑姝g‘鎬,浜ゆ槗杩囩▼鏋佸彲鑳借揪涓嶅埌浜ゆ槗鏂...
绛旓細ACID锛屾寚鏁版嵁搴撲簨鍔℃纭墽琛岀殑鍥涗釜鍩烘湰瑕佺礌鐨勭缉鍐欍鍖呭惈锛氬師瀛愭э紙Atomicity锛夈佷竴鑷存э紙Consistency锛夈侀殧绂绘э紙Isolation锛夈佹寔涔呮э紙Durability锛銆備竴涓敮鎸佷簨鍔★紙Transaction锛夌殑鏁版嵁搴擄紝蹇呴渶瑕佸叿鏈夎繖鍥涚鐗规э紝鍚﹀垯鍦ㄤ簨鍔¤繃绋嬶紙Transaction processing锛夊綋涓棤娉曚繚璇佹暟鎹殑姝g‘鎬э紝浜ゆ槗杩囩▼鏋佸彲鑳借揪涓嶅埌浜ゆ槗鏂圭殑...
绛旓細ACID鎬ц川ACID property瀹氫箟锛欰CID鎸囨暟鎹簱浜嬪姟姝g‘鎵ц鐨勫洓涓熀鏈绱犵殑缂╁啓锛鍖呭惈鍘熷瓙鎬э紙atomicity锛夈佷竴鑷存э紙consistency锛夈侀殧绂绘э紙isolation锛夊拰鎸佷箙鎬锛坉urability锛夈備竴涓敮鎸佷簨鍔$殑鏁版嵁搴撶郴缁燂紝蹇呴』瑕佸叿鏈夎繖鍥涚鐗规э紝鍚﹀垯鍦ㄤ簨鍔℃墽琛岃繃绋嬩腑鏃犳硶淇濊瘉鏁版嵁鐨勬纭э紝澶勭悊杩囩▼鏋佸彲鑳借揪涓嶅埌姝g‘瑕佹眰銆傚绉戯細璁...
绛旓細ACID鏄鏁版嵁搴撲簨鍔℃纭墽琛岀殑鍥涗釜鍩烘湰瑕佺礌鐨勭缉鍐欍
绛旓細涓銆佹暟鎹簱浜嬪姟姝g‘鎵ц鐨勫洓涓熀鏈绱1.1ACID鍘熷垯銆??ACID鍘熷垯鏄暟鎹簱浜嬪姟姝e父鎵ц鐨勫洓涓熀鏈绱狅紝鍒嗗埆鎸囧師瀛愭с佷竴鑷存с佺嫭绔嬫у強鎸佷箙鎬銆??浜嬪姟鐨勫師瀛愭(Atomicity)鏄寚涓涓簨鍔¤涔堝叏閮ㄦ墽琛,瑕佷箞涓嶆墽琛岋紝涔熷氨鏄涓涓簨鍔′笉鍙兘鍙墽琛屼簡涓鍗婂氨鍋滄浜嗭紝姣斿浣犱粠鍙栨鏈哄彇閽憋紝杩欎釜浜嬪姟鍙互鍒嗘垚涓や釜...
绛旓細ACID鏄寚鏁版嵁搴撶鐞嗙郴缁熺殑鍥涗釜鐗规э紝涔熸槸淇濋殰浜嬪姟鐨勬纭墽琛岀殑鍩烘湰瑕佺礌銆侫CID鍒嗗埆浠h〃浜嬪姟鐨勪互涓嬪洓涓壒鎬э細A 浠h〃鍘熷瓙鎬锛圓tomicity锛夊師瀛愭ф槸鏈鍩烘湰鐨勭壒鎬т箣涓锛屾寚涓涓簨鍔★紙transaction锛夋槸涓涓滀笉鍙啀鍒嗏濈殑宸ヤ綔鍗曚綅銆傚湪浜嬪姟鎵ц杩囩▼涓紝瑕佷箞鍏ㄩ儴鎵ц锛岃涔堝叏閮ㄤ笉鎵ц锛屼笉鍙兘鍙墽琛岄儴鍒嗘搷浣溿傚鏋滀簨鍔″彧...
绛旓細浜嬪姟鍦ㄦ搷浣滅郴缁熴丷edis鍜屽叧绯诲瀷鏁版嵁搴撶瓑澶氶鍩熷彂鎸ュ叧閿綔鐢紝鏈枃涓昏鍥寸粫MySQL鏁版嵁搴撹В鏋愪簨鍔″強鍏禔CID鍘熷垯銆備簨鍔℃槸鏁版嵁搴撴搷浣滅殑鍩烘湰鍗曞厓锛屽寘鍚涓猄QL璇彞锛屾墽琛屾椂瑕佷箞鍏ㄥ仛瑕佷箞鍏ㄤ笉鍋氾紝浠ョ‘淇濇暟鎹殑涓鑷存鍜屽畬鏁存с侫CID鏄 閲忎簨鍔$殑鍥涘ぇ鐗规э紝鏈鍒濊姹傛墍鏈変簨鍔″繀椤诲叿澶囪繖鍥涗釜鐗规э紝浣嗗湪瀹為檯搴旂敤涓紝濡侻ySQL鍜...
绛旓細涓鑷存(Correspondence)涓鑷存:鍦ㄤ簨鍔″紑濮嬩箣鍓嶅拰浜嬪姟缁撴潫浠ュ悗锛屾暟鎹簱鐨勫畬鏁存х害鏉熸病鏈夎鐮村潖銆傞殧绂绘(Isolation)闅旂鎬:闅旂鐘舵佹墽琛屼簨鍔★紝浣垮畠浠ソ鍍忔槸绯荤粺鍦ㄧ粰瀹氭椂闂村唴鎵ц鐨勫敮涓鎿嶄綔銆傚鏋滄湁涓や釜浜嬪姟锛岃繍琛屽湪鐩稿悓鐨勬椂闂村唴锛屾墽琛 鐩稿悓鐨勫姛鑳斤紝浜嬪姟鐨勯殧绂绘у皢纭繚姣忎竴浜嬪姟鍦ㄧ郴缁熶腑璁や负鍙湁璇ヤ簨鍔″湪浣跨敤绯荤粺...
绛旓細1. 浜嬪姟鐨勫熀鏈壒鎬э細鏁版嵁搴撲簨鍔¢氬父鍏锋湁鍥涗釜鍩烘湰鐗规э紝琚О涓篈CID鐗规с傝繖鍖呮嫭鍘熷瓙鎬с佷竴鑷存銆侀殧绂绘у拰鎸佷箙鎬с2. 浜嬪姟鐨勪綔鐢細鏁版嵁搴撲簨鍔″彲浠ョ‘淇濅竴绯诲垪鐨勬搷浣滆涔堝叏閮ㄦ垚鍔熸墽琛岋紝瑕佷箞鍏ㄩ儴涓嶆墽琛屻傚鏋滃湪浜嬪姟涓殑鏌愪釜鎿嶄綔澶辫触锛屾暣涓簨鍔¢兘浼氬洖婊氬埌鎿嶄綔鍓嶇殑鐘舵侊紝杩欐牱鍙互閬垮厤鏁版嵁鍦ㄥ苟鍙戞搷浣滄椂鍑虹幇涓嶄竴鑷寸殑...
绛旓細Oracle鏁版嵁搴撻氳繃浜嬪姟鏈哄埗纭繚鏁版嵁鐨勫畨鍏ㄦу拰涓鑷存銆備簨鍔″叿鏈夊洓涓熀鏈壒鎬э細鍘熷瓙鎬銆佷竴鑷存с侀殧绂绘у拰鎸佷箙鎬с傚師瀛愭ц姹備簨鍔′腑鎵鏈夋暟鎹搷浣滆涔堝叏閮ㄥ畬鎴愶紝瑕佷箞鍏ㄩ儴涓嶆墽琛岋紝纭繚鎿嶄綔鐨勫畬鏁存с備竴鑷存х‘淇濅簨鍔$粨鏉熷悗锛屾暟鎹姸鎬佺鍚堥鏈燂紝鎵鏈夌浉鍏宠〃鐨勬暟鎹悓姝ユ洿鏂般傞殧绂绘ф槸鍏抽敭鐗规э紝Oracle鏀寔read committed鍜...