大型面試現場:一條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)
歡迎關注白日夢,公眾號首發!持續連載中
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埠啟動。然後從接收到的資料包中取出資料,按照