2019-02-14 常用管理SQL語(yǔ)句應(yīng)用實(shí)踐(1)

1. SQL介紹

1.1 什么是SQL

SQL,英文全稱(chēng)為Structured Query Language,中文意思是結(jié)構(gòu)化查詢(xún)語(yǔ)言,它是一種對(duì)關(guān)系型數(shù)據(jù)庫(kù)中的數(shù)據(jù)進(jìn)行定義和操作的語(yǔ)言,是大多數(shù)關(guān)系型數(shù)據(jù)庫(kù)管理系統(tǒng)所支持的工業(yè)標(biāo)準(zhǔn)語(yǔ)言。
結(jié)構(gòu)化查詢(xún)語(yǔ)言(SQL)是一種數(shù)據(jù)庫(kù)查詢(xún)和程序設(shè)計(jì)語(yǔ)言,用于存取數(shù)據(jù)以及查詢(xún)、更新和管理關(guān)系型數(shù)據(jù)庫(kù)系統(tǒng)。SQL常用作MySQL邏輯備份文件的擴(kuò)展名。結(jié)構(gòu)化查詢(xún)語(yǔ)言是高級(jí)的非過(guò)程化語(yǔ)言,允許用戶(hù)在高層數(shù)據(jù)結(jié)構(gòu)上工作。它不要求用戶(hù)指定數(shù)據(jù)的存放方法,也不需要用戶(hù)了解具體的數(shù)據(jù)存放方式,所以,其完全不同于低層結(jié)構(gòu),不同的數(shù)據(jù)庫(kù)系統(tǒng)可以使用相同的結(jié)構(gòu)化查詢(xún)語(yǔ)言作為數(shù)據(jù)輸入與管理的接口。結(jié)構(gòu)化查詢(xún)語(yǔ)言語(yǔ)句可以嵌套,這使得它具有極大的靈活性和強(qiáng)大的功能。不同的數(shù)據(jù)庫(kù)系統(tǒng)的SQL會(huì)有一些差別。

1.2 SQL的分類(lèi)

  1. 數(shù)據(jù)查詢(xún)語(yǔ)言(DQL):SELECT、WHERE、ORDER BY、GROUP BY、HAVING等
  2. 數(shù)據(jù)操作語(yǔ)言(DML):INSERT、UPDATE、DELETE
  3. 事務(wù)處理語(yǔ)言(TPL)
  4. 數(shù)據(jù)控制語(yǔ)言(DCL):GRANT、REVOKE
  5. 數(shù)據(jù)定義語(yǔ)言(DDL):CREATE、DROP、ALTER
  6. 指針控制語(yǔ)言(CCL)

2. SQL解析原理流程

2.1 MySQL體系結(jié)構(gòu)簡(jiǎn)介

MySQL的體系結(jié)構(gòu)由外圍應(yīng)用程序(客戶(hù)端)、連接層、SQL層、存儲(chǔ)引擎層等組成

MySQL基本體系結(jié)構(gòu)

如上圖所示,應(yīng)用程序在連接MySQL數(shù)據(jù)庫(kù)時(shí),首先要經(jīng)過(guò)連接池技術(shù),然后通過(guò)連接池進(jìn)入SQL解析層,經(jīng)過(guò)SQL解析層的一系列處理及解析后,再進(jìn)入到存儲(chǔ)引擎層去查找數(shù)據(jù),最后通過(guò)內(nèi)存或磁盤(pán)讀取到數(shù)據(jù),然后再逐級(jí)返回,最終將數(shù)據(jù)返回給應(yīng)用程序或用戶(hù)。

2.2 SQL解析流程介紹

SQL解析流程圖

1)當(dāng)接收到SQL語(yǔ)句后,數(shù)據(jù)庫(kù)首先會(huì)判斷SQL語(yǔ)句的正確性、類(lèi)型(例如DDL、DML、DCL),然后根據(jù)不同類(lèi)型,由命令分發(fā)模塊投遞到相應(yīng)的模塊處理。如果是SELECT語(yǔ)句,則首先會(huì)查找SQL告訴緩存(query_cache);如果命中目標(biāo)數(shù)據(jù),則SQL不需要再做相應(yīng)的解析執(zhí)行操作,直接將請(qǐng)求的數(shù)據(jù)返回客戶(hù)端應(yīng)用程序即可。

2)如果用戶(hù)請(qǐng)求的數(shù)據(jù)未在告訴緩存中命中,那么會(huì)進(jìn)入SQL的解析過(guò)程。
a)對(duì)于SQL層本身來(lái)說(shuō),其實(shí)無(wú)法直接讀懂SQL語(yǔ)句的,不能直接執(zhí)行。這時(shí),就要靠SQL層的解析器(Parser)來(lái)進(jìn)行SQL的詞法、語(yǔ)句分析,最終得出1個(gè)或多個(gè)SQL語(yǔ)句的執(zhí)行計(jì)劃。
b)得出執(zhí)行計(jì)劃之后,還不能直接使用,因?yàn)榻馕銎骺赡芙o出了一條SQL語(yǔ)句的多種執(zhí)行方式,需要進(jìn)行進(jìn)一步的判斷,交由查詢(xún)優(yōu)化器(Qptimizer)去判斷。優(yōu)化器會(huì)根據(jù)自身的算法,找到代價(jià)最低(一般是有合理索引的那條)的那個(gè)執(zhí)行計(jì)劃進(jìn)行下發(fā)。
c)這時(shí)我們已經(jīng)找到合適的執(zhí)行計(jì)劃了,是否就可以執(zhí)行查詢(xún)了呢?其實(shí)SQL層中海油其他相關(guān)的模塊控制,例如,是否有權(quán)限去執(zhí)行、執(zhí)行是否需要等待等。
d)經(jīng)過(guò)SQL層的逐層處理,SQL終于被執(zhí)行,然后將執(zhí)行后的結(jié)果,投遞到下層的存儲(chǔ)引擎接口,最終經(jīng)過(guò)存儲(chǔ)引擎,獲取到磁盤(pán)數(shù)據(jù)文件上的數(shù)據(jù)。
e)SQL執(zhí)行完成后,會(huì)將此次獲取的數(shù)據(jù)更新到查詢(xún)緩存(若有特定情況則不會(huì)更新)。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容