詳談事務的幾大特點

來源:互聯網
上載者:User

標籤:事務

Transaction 也就是所謂的事務了,通俗理解就是一件事情。從小,父母就教育我們,做事情要有始有終,不能半途而廢。 事務也是這樣,不能做一般就不做了,要麼做完,要麼就不做。也就是說,事務必須是一個不可分割的整體,就像我們在化學課裡學到的原子,原子是構成物質的最小單位。於是,人們就歸納出事務的第一個特性:原子性(Atomicity)。我靠,一點都不神秘嘛。


特別是在資料庫領域,事務是一個非常重要的概念,除了原子性以外,它還有一個極其重要的特性,那就是:一致性(Consistency)。也就是說,執行完資料庫操作後,資料不會被破壞。打個比方,如果從 A 賬戶轉賬到 B 賬戶,不可能因為 A 賬戶扣了錢,而 B 賬戶沒有加錢吧。如果出現了這類事情,您一定會非常氣憤,什麼 diao 銀行啊!


當我們編寫了一條 update 語句,提交到資料庫的一刹那間,有可能別人也提交了一條 delete 語句到資料庫中。也許我們都是對同一條記錄進行操作,可以想象,如果不稍加控制,就會出大麻煩來。我們必須保證資料庫操作之間是“隔離”的(線程之間有時也要做到隔離),彼此之間沒有任何幹擾。這就是:隔離性(Isolation)。


要想真正的做到操作之間完全沒有任何幹擾是很難的,於是乎,每天上班打醬油的資料庫專家們,開始動腦筋了,“我們要制定一個規範,讓各個資料庫廠商都支援我們的規範!”,這個規範就是:交易隔離等級(Transaction Isolation Level)。能定義出這樣牛逼的規範真的挺不容易的,其實說白了就四個層級:


  1. READ_UNCOMMITTED

  2. READ_COMMITTED

  3. REPEATABLE_READ

  4. SERIALIZABLE

千萬不要去翻譯,那隻是一個代號而已。從上往下,層級越來越高,並發性越來越差,安全性越來越高,反之則反。


當我們執行一條 insert 語句後,資料庫必須要保證有一條資料永久地存放在磁碟中,這個也算事務的一條特性, 它就是:持久性(Durability)。


歸納一下,以上一共提到了事務的 4 條特性,把它們的英文單詞首字母合起來就是:ACID,這個就是傳說中的“事務 ACID 特性”!

這四個傢伙當中,誰才是老大?


其實想想也就清楚了:原子性是基礎,隔離性是手段,持久性是目的,真正的老大就是一致性。資料不一致了,就相當於“江湖亂套了,流氓戴胸罩”。所以說,這三個小弟都是跟著“一致性”這個老大混,為他全心全意服務。


這四個傢伙當中,其實最難理解的反倒不是一致性,而是隔離性。因為它是保證一致性的重要手段,是工具,使用它不能有半點鐘差池,否則後果自負!

事務並發所引起的跟讀取資料有關的問題,各用一句話來描述一下:

   1.髒讀:事務 A 讀取了事務 B 未提交的資料,並在這個基礎上又做了其他動作。

首先看看“髒讀”,看到“髒”這個字,我就想到了噁心、骯髒。資料怎麼可能髒呢?其實也就是我們經常說的“垃圾資料”了。比如說,有兩個事務,它們在並發執行(也就是競爭)。

餘額應該為 1500 元才對!請看 T5 時間點,事務 A 此時查詢餘額為 0 元,這個資料就是髒資料,它是事務 B 造成的,明顯事務沒有進行隔離,滲過來了,亂套了。

 2.不可重複讀取:事務 A 讀取了事務 B 已提交的更改資料。

事務 A 其實除了查詢了兩次以外,其他什麼事情都沒有做,結果錢就從 1000 變成 0 了,這就是重複讀了。可想而知,這是別人乾的,不是我乾的。其實這樣也是合理的,畢竟事務 B 提交了事務,資料庫將結果進行了持久化,所以事務 A 再次讀取自然就發生了變化。

這種現象基本上是可以理解的,但在有些變態的情境下卻是不允許的。畢竟這種現象也是事務之間沒有隔離所造成的,但我們對於這種問題,似乎可以忽略。

 3.幻讀:事務 A 讀取了事務 B 已提交的新增資料。

銀行工作人員,每次統計總存款,都看到不一樣的結果。不過這也確實也挺正常的,總存款增多了,肯定是這個時候有人在存錢。但是如果銀行系統真的這樣設計,那算是玩完了。這同樣也是事務沒有隔離所造成的,但對於大多數應用系統而言,這似乎也是正常的,可以理解,也是允許的。銀行裡那些噁心的那些系統,要求非常嚴密,統計的時候,甚至會將所有的其他動作給隔離開,這種隔離等級就算非常高了

第一條是堅決抵制的,後兩條在大多數情況下可不作考慮。

這就是為什麼必須要有交易隔離等級這個東西了,它就像一面牆一樣,隔離不同的事務.

本文出自 “小止” 部落格,請務必保留此出處http://10541556.blog.51cto.com/10531556/1828027

詳談事務的幾大特點

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.