1. 程式人生 > >大型面試現場:一條update sql執行都經歷什麼?

大型面試現場:一條update sql執行都經歷什麼?

### 導讀 Hi,大家好!我是白日夢!本文是MySQL專題的第 24 篇。 今天我要跟你分享的MySQL話題是:“從一條update sql執行都經歷什麼開始,發散開一系列的問題,看看你能抗到第幾問吧”

換一種寫作風格,自導自演面試現場!感覺這樣還是比較有趣的,歡迎大家訂閱我的MySQL專題,公眾號首發!持續更新中~
[點選閱讀原文,格式會好看一點哦~](https://mp.weixin.qq.com/s/LdNumgS8H43R_PeSH30pUQ) [點選閱讀原文,格式會好看一點哦~](https://mp.weixin.qq.com/s/LdNumgS8H43R_PeSH30pUQ) [點選閱讀原文,格式會好看一點哦~](https://mp.weixin.qq.com/s/LdNumgS8H43R_PeSH30pUQ) 歡迎關注白日夢,公眾號首發!持續連載中


1
好!我們開始吧! 













                              











Hi同學,聽說你上一面表現的還可以,這一面要不咱繼續?


嗯,好啊!




好,你說一下一條update sql的執行,都經歷了哪些階段吧


我可以畫一張簡圖,然後我們一起看一下這張腦圖吧



你可以花幾秒看下這個圖哦




嗯,你繼續!


一般在我們的後端系統中,和資料庫打交道都邏輯都放在DAO層,DAO層的持久化框架中封裝了:資料驅動(Driver),SQL語句一般也都是由DAO層的持久化框架傳送給資料庫的。




嗯,那你說的DAO層就是上圖中的客戶端了吧


但是我看你的簡圖,貌似是把資料庫劃分成兩部分,Server層和InnoDB層。你說說看!


是的,通常大家會把資料庫分層兩部分,上層的Server層和下層的儲存引擎層。


總的來看:Server層主要是負責和客戶端建立網路連線,接受客戶端傳遞過來的SQL、預處理、由執行器傳送給儲存引擎執行。

而儲存引擎會和作業系統的檔案系統打交道。


我在圖中畫的儲存引擎層是InnoDB,MySQL不止這一種執行引擎,對於MySQL來說儲存引擎是可插拔的。


常見的還有什麼MyISAM、NDB、Memory等等。




嗯,你說的沒錯 !那如果我讓你寫一個MySQL的Server層。 你有什麼思路嗎?說說看!


.....



有思路 ,下面我用大白話簡單描述一下:


你知道的!MySQL被吹的再神,本質上不過是個軟體而已 ,而且Server層的功能相對來說比較簡單,主要就是接受客戶端的連線,拿到網路包中的SQL語句,然後處理......


並且它是單程序多執行緒的軟體,通常會佔用3306埠啟動,那我完全可以一比一寫出一個MySQL Server層嘛!


比如我可以用熟悉的程式語言,TCP程式設計,寫個TCP - Server端,監聽3306埠啟動。然後從接收到的資料包中取出資料,按照