更新時(shí)間:2022-09-29 來(lái)源:黑馬程序員 瀏覽量:
事務(wù)有很嚴(yán)格的定義,它必須同時(shí)滿足4個(gè)特性,即原子性(Atomicity)、一致性(Consistency)、隔離性(Isolation)、持久性(Durability),也就是人們俗稱的ACID標(biāo)準(zhǔn),接下來(lái)就針對(duì)這4個(gè)特性進(jìn)行講解,具體如下。
原子性是指一個(gè)事務(wù)必須被視為一個(gè)不可分割的最小工作單元,只有事務(wù)中所有的數(shù)據(jù)庫(kù)操作都執(zhí)行成功,才算整個(gè)事務(wù)執(zhí)行成功,事務(wù)中如果有任何一個(gè)SQL語(yǔ)句執(zhí)行失敗,已經(jīng)執(zhí)行成功的SQL語(yǔ)句也必須撤銷,數(shù)據(jù)庫(kù)的狀態(tài)退回到執(zhí)行事務(wù)前的狀態(tài)。
一致性是指事務(wù)將數(shù)據(jù)庫(kù)從一種狀態(tài)轉(zhuǎn)變?yōu)橄乱环N一致的狀態(tài)。例如,在表中有一個(gè)字段為姓名,具有唯一約束,即姓名不能重復(fù),如果一個(gè)事務(wù)對(duì)姓名進(jìn)行了修改,使姓名變得不唯一了,這就破壞了事務(wù)的一致性要求,如果事務(wù)中的某個(gè)動(dòng)作失敗了,系統(tǒng)可以自動(dòng)撤銷事務(wù),返回初始化的狀態(tài)。
隔離性還可以稱為并發(fā)控制、可串行化、鎖等,當(dāng)多個(gè)用戶并發(fā)訪問(wèn)數(shù)據(jù)庫(kù)時(shí),數(shù)據(jù)庫(kù)為每一個(gè)用戶開啟的事務(wù),不能被其他事務(wù)的操作數(shù)據(jù)所干擾,多個(gè)并發(fā)事務(wù)之間要相互隔離。
事務(wù)一旦提交,其所做的修改就會(huì)永久保存到數(shù)據(jù)庫(kù)中,即使數(shù)據(jù)庫(kù)發(fā)生故障也不應(yīng)該對(duì)其有任何影響。需要注意的是,事務(wù)的持久性不能做到100%的持久,只能從事務(wù)本身的角度來(lái)保證永久性,而一些外部原因?qū)е聰?shù)據(jù)庫(kù)發(fā)生故障,如硬盤損壞,那么所有提交的數(shù)據(jù)可能都會(huì)丟失。
需要注意的是,針對(duì)事務(wù)的4個(gè)特性有個(gè)簡(jiǎn)單的印象就可以了,不必太過(guò)斟酌,事務(wù)的操作才是重點(diǎn)掌握的內(nèi)容。
Java操作數(shù)據(jù)庫(kù):多表操作中的關(guān)聯(lián)關(guān)系
2022-09-29SpringBoot自動(dòng)配置的工作流程是怎樣的?
2022-09-28什么是抽象類?使用abstract格式修飾抽象方法
2022-09-28大數(shù)據(jù)和Java哪個(gè)難學(xué)?公布答案
2022-09-27快速掌握HTML+CSS+Javascript+Vue3知識(shí)【Java程序員定制版】
2022-09-26java零基礎(chǔ)自學(xué)教程免費(fèi),看完愛上Java學(xué)習(xí)
2022-09-26