資料庫事務基礎知識

2021-09-24 10:21:41 字數 2722 閱讀 7198

為什麼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 檢視 從乙個或幾個基本表 或檢視 匯出的表,與基本表不同,是乙個虛表...