數(shù)據(jù)操作控制
??????1.當執(zhí)行一個功能的時候需要執(zhí)行多個更新操作,如:插入多個對象,刪除多個對象等,就可能存在執(zhí)行一個更新操作成功之后下一個更新操作失敗,那么這個功能的執(zhí)行就算是失敗的,可是卻向數(shù)據(jù)庫添加或刪除了不完全的相關(guān)數(shù)據(jù),所以就會出現(xiàn)臟數(shù)據(jù)
??????解決方法:
??????1) 通過事物控制讓多個執(zhí)行語句一起提交commit,commit失敗的話就回滾rollback,做到事物的原子性原則
??????2) 在數(shù)據(jù)庫設(shè)置一個操作成功或失敗的字段(或者本地臨時文件里存放相關(guān)的控制數(shù)據(jù)),通過該字段進行控制,在執(zhí)行出錯后刪除所有含有操作失敗字段的數(shù)據(jù)
???????
??????2.數(shù)據(jù)庫同步訪問控制:比如說一條記錄有兩個以上的用戶同時訪問,他們讀取出來的是相同的數(shù)據(jù),但寫入時有先后,如果不做控制就會出現(xiàn)后來寫入的數(shù)據(jù)把原來做了更新的數(shù)據(jù)覆蓋,使原來做的更新操作丟失就是無效,因為他們都是在最原始讀取出來的數(shù)據(jù)上做的修改,而不是在別人做了修改后的數(shù)據(jù)上做修改
??????解決方法:
??????1) 可以在數(shù)據(jù)庫多設(shè)置一個版本字段來控制該數(shù)據(jù)的歷史版本號(或者本地臨時文件里存放相關(guān)的控制數(shù)據(jù)),就是沒個人做了修改以后都要更新一下這個版本字段,同時更新之前也要做一下版本的比較,如果現(xiàn)在的版本和之前取出來的數(shù)據(jù)的版本不一樣,那么就要從新讀取數(shù)據(jù)再寫入,這樣就可以保證不會丟失修改
?????