理想狀況下,交易應該是 可序列化的。 如果同時執行交易的結果與連續執行的結果相同——也就是說,連續執行交易的結果相同,則稱該交易是可序列化的。 哪筆交易先執行並不重要,重要的是結果不反映交易間的混合。
例如,假設交易 A 將資料值乘以 2,交易 B 將資料值加到 1。 現在假設有兩個資料值:0 和 10。 若這些交易連續執行,若交易 A 先執行,新值將為 1 和 21,若交易 B 先執行,則為 2 和 22。 但如果兩個交易對於每個數值的執行順序不同呢? 如果交易 A 先執行第一個值,交易 B 先執行第二個值,則新值為 1 和 22。 若順序反轉,則新值為 2 和 21。 若僅有 1、21 與 2、22 結果的話,交易是可序列化的。 如果結果是 1, 22 或 2, 21,則交易不可序列化。
那麼,為什麼序列化是值得追求的呢? 換句話說,為什麼重要的是看起來每筆交易都在下一筆交易開始前完成? 請考慮以下問題。 一名業務員在輸入訂單,同時一名職員在寄帳單。 假設銷售員輸入了X公司訂單但未執行;業務員仍在與X公司的代表通話。職員要求一份所有未解決訂單清單,發現了X公司的訂單並寄給他們一張帳單。 現在X公司的代表決定要更改訂單,業務員在完成交易前就更改了訂單。 公司X收到錯誤的帳單。
如果銷售員和職員的交易都能序列化,這個問題就不會發生。 要麼業務員的交易會在書記開始交易前完成,這樣書記會寄出正確的帳單;要麼是書記的交易會在業務開始前完成,這時書記根本不會向X公司寄帳單。