欧美一区二区三区,国内熟女精品熟女A片视频小说,日本av网,小鲜肉男男GAY做受XXX网站

mysql源碼解說

榮姿康2年前12瀏覽0評論

MySQL是世界上最流行的開放源代碼關系型數(shù)據(jù)庫管理系統(tǒng)。在MySQL的源碼中包含著豐富的知識和技術,此時我們就可以逐個解說它提供的函數(shù)和接口,讓我們能深入理解并使用MySQL。

在MySQL的源碼中我們可以找到很多文件,其中一個很重要的是sql目錄,這個目錄包含了MySQL中所有操作數(shù)據(jù)的代碼,例如SELECT、INSERT、UPDATE等等。我們可以找到一個非常重要的文件sql_parse.cc,它是分析SQL語句的主要代碼。

bool mysql_parse(THD *thd, LEX *lex)
{
DBUG_ENTER("mysql_parse");
/* make lex the current lex for this Thread */
thd->lex = lex;
thd->query_length= (uint) ((thd->query_end-thd->query) & MAX_I32);
CHECK_STACK(thd->query_length + ROW_COPY_BUFF_LEN);
move_commands(&thd->prep_state, &thd->query);
switch (lex->sql_command)
{
case SQLCOM_SELECT:
error = execute_select(thd, lex, result);
break;
case SQLCOM_CREATE_TABLE ...
}
...
}

在上面的這個函數(shù)中,我們可以看到它首先把輸入的SQL語句傳給了lex,接著開始對SQL語句進行分析,根據(jù)lex->sql_command的不同值分別調(diào)用不同的函數(shù)進行執(zhí)行。

另外一個重要的文件就是sql_class.cc,其中定義了很多操作數(shù)據(jù)的類和操作類的函數(shù)。

int mysql_select(THD *thd, Item ***rref_pointer_array,
TABLE_LIST *tables, uint wild_num, List&fields, ...
{
TABLE *select_lex_table= select_lex->first_select()->get_table_list()
? select_lex->first_select()->get_table_list()
: *tables->table;
JOIN *join= tables->join;
bool top_level_select= thd_eflags(thd) & OPTION_SELECT_LIMIT;
...
Query_arena arena;
bool lock_tables_saved= thd->transaction.stmt.is_lock_tables_set();
while (join->prepare(thd, tables, conditions))
{
...
if (quick_select)
{
...
if (ex && ex->send_to_client())
res= ex;
}
else if (join->exec())
{
...
if (ex && ex->send_to_client())
res= ex;
}
...
}
join->cleanup();
...
}

上面這段代碼就是MySQL中用來執(zhí)行SELECT語句的函數(shù)mysql_select的體部分,它的主要作用就是執(zhí)行SELECT語句,并將SELECT的結果返回給客戶端。

MySQL源碼中還有很多文件和函數(shù)等值得我們?nèi)W習和解說,需要我們認真閱讀源代碼,逐步深入理解。