在數(shù)據(jù)庫中,導(dǎo)致數(shù)據(jù)不一致的根本原因是:數(shù)據(jù)冗余。數(shù)據(jù)冗余是指數(shù)據(jù)之間的重復(fù);由于數(shù)據(jù)的重復(fù)存儲,當(dāng)不同的應(yīng)用程序使用和修改不同的備份時(shí),很容易造成數(shù)據(jù)的不一致性。
本教程操作環(huán)境:windows7系統(tǒng)、mysql8版本、Dell G3電腦。
數(shù)據(jù)冗余是導(dǎo)致數(shù)據(jù)不一致的根本原因。
一般導(dǎo)致數(shù)據(jù)庫中數(shù)據(jù)不一致的原因有三種情況:
-
第一種是數(shù)據(jù)冗余造成的;
-
第二種是并發(fā)控制不當(dāng)造成的;
-
第三種是由于某種原因(比如軟硬件故障或者操作錯(cuò)誤)導(dǎo)致數(shù)據(jù)丟失或數(shù)據(jù)損壞。
第一種情況:數(shù)據(jù)冗余
數(shù)據(jù)冗余是指數(shù)據(jù)之間的重復(fù),也可以說是同一數(shù)據(jù)存儲在不同數(shù)據(jù)文件中的現(xiàn)象。
由于數(shù)據(jù)的重復(fù)存儲,當(dāng)不同的應(yīng)用程序使用和修改不同的備份時(shí),很容易造成數(shù)據(jù)的不一致性。
假如數(shù)據(jù)庫中兩個(gè)表都放了用戶的地址,在用戶的地址發(fā)生改變時(shí),如果只更新了一個(gè)表的數(shù)據(jù),那么兩個(gè)表就有了不一致的數(shù)據(jù)。
第二種情況:并發(fā)控制不當(dāng)
假如在飛機(jī)票訂票系統(tǒng)中,如果兩個(gè)購票點(diǎn)同時(shí)查詢某張機(jī)票的訂購情況,而且分別為訂購了這張機(jī)票,如果并發(fā)控制不當(dāng),就會造成同一張機(jī)票賣給兩個(gè)用戶的情況。由于系統(tǒng)沒有進(jìn)行并發(fā)控制或者并發(fā)控制不當(dāng),造成數(shù)據(jù)不一致。
第三中情況:故障和錯(cuò)誤
如果軟硬件出現(xiàn)故障或者操作錯(cuò)誤導(dǎo)致數(shù)據(jù)丟失或數(shù)據(jù)損壞,引起數(shù)據(jù)不一致。因此我們需要提供數(shù)據(jù)庫維護(hù)和數(shù)據(jù)庫數(shù)據(jù)恢復(fù)的一些措施。 要根據(jù)各種 數(shù)據(jù)庫維護(hù) 手段(如轉(zhuǎn)存、日志等)和 數(shù)據(jù)恢復(fù) 措施將 數(shù)據(jù)庫恢復(fù) 到某個(gè)正確的、完整的、一致性的狀態(tài)下。