為什麼80%的碼農都做不了架構師?>>>
工作也有好幾年了,一直在用資料庫,但是一些基本知識老容易遺忘,現在整理一下,作為複習。
資料庫事物有嚴格的定義,滿足4個特性:
①原子性(atomicity):事務中的所有元素作為乙個整體提交或回滾,事務的個元素是不可分的,事務是乙個完整操作。
②一致性(consistemcy):事物完成時,資料必須是一致的,也就是說,和事物開始之前,資料儲存中的資料處於一致狀態。保證資料的無損。例如,a賬戶給b賬戶轉賬,無論操作是否成功,a和b的存款總額是不變。
③隔離性(isolation):對資料進行修改的多個事務是彼此隔離的。這表明事務擁有各自的資料空間,它們的操作不會對對方產生干擾。
④永續性(durability):事務完成之後,事物中的所有資料庫操作都必須持久化到資料庫。
事務的標準定義: 指作為單個邏輯工作單元執行的一系列操作,而這些邏輯工作單元需要具有原子性, 一致性,隔離性和永續性四個屬性,統稱為acid特性。
資料庫的併發問題
資料庫中的資料可能同時被多個事務訪問,如果沒有採取必要的隔離措施,會導致併發問題。問題歸納為5類:髒讀、不可重複讀、幻讀以及兩類更新問題(第一類丟失和第二類丟失)。
髒讀(dirty read)
a事務讀取到b事務尚未提交的更改資料,並在這個資料基礎上修改。
時間事務a
事務bt1
事務開始
t2事務開始
t3查詢餘額為1000
t4取出500元,餘額改為500元
t5查詢賬戶餘額為500元(髒讀)
t6事物撤銷,餘額恢復為1000元
t7匯入100元,餘額改為600元
t8事物提交
在這個業務中,b事務取款500後又撤銷了,a在往賬戶中轉賬100元時,讀取了b事務尚未提交的改動,造成賬戶損失500元。
不可重複讀(unrepeatable read)
a事務在操作過程中,讀取了b事務提交的修改資料,
造成在同乙個事務中同乙份資料不一致。
時間事務a事務b
t1事務開始
t2事務開始
t3查詢餘額為1000
t4查詢賬戶餘額為1000
t5提現100元,餘額改為900元
t6事務提交
t7查詢賬戶餘額為900元(不可重複讀)
在a事務中,t4和t7時間點資料不一致。
幻讀(phantom read)
常發生在統計資料的時候:a事務讀取b事務提交的新增資料。
時間事務a事務b
t1事務開始
t2事務開始
t3統計總存款額10000元
t4新增乙個賬戶,存入100元
t5事務提交
t6再次統計總存款10100元
新增資料正好滿足查詢條件,在a事務中兩次統計的結果不一樣。
幻讀和不可重複讀的概念很相似,區別在於前者是讀到了其他事務提交的新增資料,後者是讀到了已經提交的資料修改。區別這兩個概念主要是由於避免這兩種情況的策略不同,防止讀到更改的資料需要對資料新增行級鎖,而防止讀取到新增資料,需要新增表級鎖——將整個表鎖住。
第一類丟失更新
a事務撤銷的時候,把已經提交的b事務的更新資料覆蓋了。(不知道oracle是怎麼解決的~~)
時間事務a事務b
t1事務開始
t2事務開始
t3查詢餘額為1000元
t4查詢餘額為1000元
t5轉入100,餘額改為1100元
t6事務提交
t7取出100元,餘額改為900元
t8事務撤銷
t9餘額恢復為1000(丟失更新)
實際上,是a事務「撤銷」了b事務的操作。
第二類丟失更新
a事務覆蓋了b事務已經提交的資料,比較常見~~
時間事務a
事務bt1
事務開始
t2事務開始
t3查詢餘額為1000元
t4查詢餘額為1000元
t5提現100,餘額改為900元
t6事務提交
t7轉入100元
t8事務提交
t9餘額改為1100元(丟失更新)
事務a「覆蓋」了事務b的操作。
事務的隔離級別
如果程式直接通過鎖實現事務管理,會非常麻煩,好在現在的資料庫都提供一定的資料庫隔離級別。
隔離級別
髒讀不可重複讀
幻讀第一類丟失
第二類丟失更新
read uncommited有有
有無有read commited無有
有無有repeatable read無無
有無無serializable無無
無無無 事務的隔離級別和資料庫併發性是對立的,此消彼長。到最高的serializable級別,基本是序列了。
另外,具體的事務隔離有賴於資料庫的支援,不一定每個資料庫都支援上述的隔離級別,也有可能幾個隔離級別是等效的情況,具體情況請參考資料庫文件。
資料庫基礎知識
資料定義 定義基本表 create table 表名 列名 資料型別 列級完整性約束條件 列名 資料型別 列級完整性約束條件 表級完整性約束條件 後面用到的表 1 學生 表 student 由學號 sno 姓名 sname 性別 s 年齡 sage 所在系 sdept 5個屬性組成,可記為 stud...
資料庫 基礎知識
e r模型 實體 聯絡模型 entity relationship model,e r模型 實體是指現實中區別於其他物件的一種 物體 或一件 事情 例如一名學生,乙個專案等等。同乙個型別中所有的實體被叫做實體集,對應於資料庫的一張表,乙個實體則對應於一條記錄。不同的任務之間,就是通過聯絡關係整合到一...
資料庫基礎知識
一 1 ddl 資料庫定義語句,建立資料表 dml 資料庫操作語言 dcl 資料控制語言 dql 資料查詢語言 2 資料查詢,sql語句 看課堂作業 查詢結果是表。3 聚集函式的一般格式 會使用 distinct all 列名 4 檢視 從乙個或幾個基本表 或檢視 匯出的表,與基本表不同,是乙個虛表...