mysql簡介

MySQL Linux 技術 做一個完美的程序猿 做一個完美的程序猿 2017-10-29

MySQL 架構圖

在理解事務的隔離性之前,我們必須先要了解Mysql數據的邏輯架構!

mysql簡介

mysql 邏輯圖

如果能夠在頭腦中構建一幅Mysql各組件之間如何協同工作的架構圖,就會有助於我們深入的理解Mysql數據庫。上面的圖有點複雜現在我們只需要記住下面的簡圖即可,如下圖所示:

mysql簡介

存儲引擎

1.2簡介

下面來簡單的介紹一下:

第一層:這層服務並不是Mysql獨有的哦!大多數基於網絡的客戶端/服務器的工具或者服務都有類似的架構,比如:連接處理、授權認證、安全等等,和我之前用python編寫的socket服務是一樣一樣的!

第二層:這是Mysql比較有意思的部分,MySQL的大多數核心服務功能都在這一層,包括查詢解析、分析、優化、緩存以及所有的內置函數(例如:日期、時間、數學和加密函數),所有跨存儲引擎的功能都在這一層實現:存儲過程、觸發器、視圖等。

第三層:包含了存儲引擎。存儲引擎負責MySQL中數據存儲和提取。類似於linux中的各種文件系統,都有各自的優勢和劣勢。

現在我們頭腦中應該有MySQL的邏輯架構了,在真正的開始講解事務的隔離性之前還有一個必須理解的概念,那就是事務!

那麼何為事務?其實很簡單的哦!

官方定義:數據庫事務(簡稱:事務)是數據庫管理系統執行過程中的一個邏輯單位,由一個有限的數據庫操作序列構成。

事務就是一組原子性的SQL查詢,或者說一個獨立的工作單元。如果數據庫引擎能夠成功的對數據庫應用該組查詢的全部語句,那麼執行該組查詢。如果其中有任何一條語句因為崩潰或其他原因無法執行,那麼所有的語句都不會執行,也就是說,事務的語句,要麼全部執行成功,要麼全部執行失敗。

就用我們最土豪的神器來舉個例子:支付寶。假設你要從支付寶的賬戶餘額轉移200萬元到餘額寶,那麼至少需要三個步驟:

1、檢查賬戶餘額是否高於200萬元;

2、從賬戶餘額中減去200萬元;

3、餘額寶中增加200萬元。

上述三個步驟的操作必須打包在一個事務中,任何一個步驟失敗,則必須回滾(Rollback)所有的步驟。

可以用START TRANSACTION語句開始一個事務,然後要麼使用COMMIT提交事務將修改的數據持久保留,要麼使用ROLLBACK(回滾)撤銷所有的修改。代碼如下:

1 START TRANSACTION; #mysql基礎語法後面需要加分號,表示結束

2 SELECT balance FROM checking WHERE customer_id = 123456;

3 UPDATE checking SET balance = balance – 2000000.00 WHERE customer_id = 123456;

4 UPDATE saving SET balance = balance + 2000000.00 WHERE customer_id = 123456;

5 COMMIT;

單純的事務概念並不是故事的全部。想一想,如果執行到第四條語句時服務器崩潰了,會發生什麼?天知道,用戶可能會損失200萬。再假如,在執行到第三條語句和第四條語句之間時,另外一個進程要刪除賬戶的所有餘額,那麼結果可能就是阿里不知道這個邏輯的情況下白白送了200萬RMB。

為了不空談事務的概念,系統必須通過嚴格的測試:ACID測試。

ACID表示原子性(atomicity)、一致性(consistency)、隔離性(isolation)、持久性(durability)。一個運行良好的數據庫管理系統(DBMS)必須具備這些特徵。這些特性可以確保阿里不會搞丟你的money!而在應用邏輯中,實現卻是很難的,甚至可以說是不可完成的任務。

相關推薦

推薦中...