本篇文章為大家展示了一條查詢SQL查詢語(yǔ)句的執(zhí)行原理是什么,內(nèi)容簡(jiǎn)明扼要并且容易理解,絕對(duì)能使你眼前一亮,通過(guò)這篇文章的詳細(xì)介紹希望你能有所收獲。
創(chuàng)新互聯(lián)建站專(zhuān)注于網(wǎng)站建設(shè)|網(wǎng)站維護(hù)公司|優(yōu)化|托管以及網(wǎng)絡(luò)推廣,積累了大量的網(wǎng)站設(shè)計(jì)與制作經(jīng)驗(yàn),為許多企業(yè)提供了網(wǎng)站定制設(shè)計(jì)服務(wù),案例作品覆蓋成都火鍋店設(shè)計(jì)等行業(yè)。能根據(jù)企業(yè)所處的行業(yè)與銷(xiāo)售的產(chǎn)品,結(jié)合品牌形象的塑造,量身開(kāi)發(fā)品質(zhì)網(wǎng)站。
先熟悉一下淺而易懂SQL執(zhí)行的流程圖SQL查詢過(guò)程七步曲
1.查詢SQL發(fā)送請(qǐng)求
客戶端將查詢sql按照MySQL通信協(xié)議傳輸?shù)椒?wù)端。服務(wù)端接受到請(qǐng)求后,服務(wù)端單起一個(gè)線程執(zhí)行sql
執(zhí)行前mysql會(huì)通過(guò)命令分發(fā)器判斷其是否是一條select語(yǔ)句(判斷sql語(yǔ)句前6個(gè)字符是否為select);
MySQL在開(kāi)啟查詢緩存的情況下,首先會(huì)先在查詢緩存中查找該SQL是否完全匹配,如果完全匹配,驗(yàn)證當(dāng)前用戶是否具備查詢權(quán)限,如果權(quán)限驗(yàn)證通過(guò),直接返回結(jié)果集給客戶端,該查詢也就完成了。如果不匹配繼續(xù)向下執(zhí)行。
如果在查詢緩存中未匹配成功,則將語(yǔ)句交給分析器作語(yǔ)法分析。MySQL通過(guò)分析語(yǔ)法知道要查的內(nèi)容。這步會(huì)對(duì)語(yǔ)法進(jìn)行檢驗(yàn),如果語(yǔ)法不對(duì)就會(huì)返回語(yǔ)法錯(cuò)誤中斷查詢。如果語(yǔ)法不正確You have an error in your SQL syntax
(1)分析器的工作完成后,將語(yǔ)句傳遞給預(yù)處理器,檢查數(shù)據(jù)表和數(shù)據(jù)列是否存在,解析別名看是否存在歧義如果錯(cuò)誤返回
Unknown column xxx in ‘where clause’
(2)sql是否有該表的的操作權(quán)限;如果錯(cuò)誤
ERROR 1142 (42000): SELECT command denied to user 'root'@'localhost' for table 'xxx'
語(yǔ)句解析完成后,MySQL就知道要查的內(nèi)容了,之后會(huì)將語(yǔ)句傳遞給優(yōu)化器進(jìn)行優(yōu)化(通過(guò)索引選擇最快的查找方式),并生成執(zhí)行計(jì)劃。最后,交給執(zhí)行器去具體執(zhí)行該查詢語(yǔ)句。執(zhí)行器開(kāi)始執(zhí)行后,會(huì)逐漸將數(shù)據(jù)保存到結(jié)果集中,同時(shí)會(huì)逐步將數(shù)據(jù)緩存到查詢緩存中,最終將結(jié)果集返回給客戶端。上述內(nèi)容就是一條查詢SQL查詢語(yǔ)句的執(zhí)行原理是什么,你們學(xué)到知識(shí)或技能了嗎?如果還想學(xué)到更多技能或者豐富自己的知識(shí)儲(chǔ)備,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。
新聞標(biāo)題:一條查詢SQL查詢語(yǔ)句的執(zhí)行原理是什么
文章路徑:
http://weahome.cn/article/geoeog.html