2016-08-09 100 views
1

假設我有以下表MYSQL插入內部工作

create table MyTable 
(
    id int unsigned auto_increment primary key, 
    data varchar(4) not null 
); 

任何人都可以向我解釋的具體步驟,當我插入一個來自客戶端這樣

insert into MyTable (data) values ("ABCD"); 

條目MYSQL服務器內部執行例如: (解析查詢 - 檢查權限 - ........ - 等)

我想知道MYSQL服務器從做的那一刻起的確切工作從客戶端查詢到數據存儲成功的時間,每件事情都可以。

編輯:

我想知道在這兩個存儲引擎的步驟:MYISAM - InnoDB的

感謝

+1

如果您想知道這是因爲純粹的興趣,爲什麼不閱讀源代碼?如果這背後還有另一個原因 - 爲什麼你不解釋你遇到的真正問題? – Mjh

回答

3

你所要求的是源代碼。 它在這裏https://github.com/mysql/mysql-server

經過一番澄清之後,這裏是一個(非常小的)想法,即除了將值存儲到文件之外,MySQL(或其他數據庫)必須做什麼。 (MySQL)數據庫必須具有ACID事務,因此必須做出很多強有力的保證,即文件不會。

它必須確保:

  • 原子性
  • 一致性
  • 隔離
  • 耐久性

此外,在大多數實際情況下,它必須保持至少一個指數,該指數文件纔不是。

ACID和索引維護是完成的工作,需要花費時間才能追加到一個平面文件。

+2

啊,所以你不需要你所要求的,這是「從發送客戶查詢到數據成功存儲的那一刻,MYSQL服務器所做的確切工作」。 – z5h

+0

@johnsamir - 基本上你想有人爲你免費工作,這是正確的嗎? – Mjh

+0

我只想弄清楚爲什麼在MYSQL數據庫中插入數據比在普通的二進制文件中插入數據需要相當長的時間。對我的問題抱歉不完整。 –