SQL語句的執行過程

來源:互聯網
上載者:User

伺服器接收到SQL語句之後,要經過如下步驟完成操作:Parse(解析)—> Bind(綁定)—> Execute(執行)。

畫個流程圖比較明顯的表示了這些過程:

下面說明執行的具體細節:

1 Select(查詢)

2 INSERT/DELETE/UPDATE

這些都是對資料進行修改的語句,畫個流程圖,簡潔明了:

這個敘述比較混亂,舉個例子:

有這樣一行,學生id是100,成績是99,現在要將這個成績改成80(這個ID對應的行,有且僅有一行)。

SQL應該是update student set score=80 where stu_id = 100;

假設這個資料區塊已經在buffer cache裡了,那麼就要首先取得兩個鎖:表的資料行獨佔鎖和資料行獨佔鎖。下面,就要把記錄為99的資料Redo Entry複製到log buffer。然後,會產生undo block,大概是這樣的(100,99)。這之後,會把修改的Redo Entry也複製到log buffer裡去,這個是80的。所有這些做完以後,成績會被從99更新到80。

這一切之後,輸入commit。

這時資料庫會做這些事情:

1 會把commit的Redo Entry複製到Log Buffer裡,這樣的話,按照時間順序,Log Buffer裡就有了如下三組:(100,99),(100,80),commit。

2 啟動LGWR。按照上面的順序把Log Buffer寫到Online Logfile裡。

3 告訴使用者進程,結束了。

很長時間以來,我都以為commit以後,資料會被寫到資料檔案裡,就是Datafile,但是事實不是這樣。上面的步驟完成之後Datafile裡存在的還是(100,99)。下次再查詢的時候,就直接查緩衝區資料了。如果緩衝區緊張了,DBWR會開始工作,將緩衝刷進資料檔案。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.