电竞比分网-中国电竞赛事及体育赛事平台

分享

作為一名程序員,你真的了解SQL嗎?

 北歐模式 2022-05-13

對(duì)于一名程序員而言,數(shù)據(jù)庫(kù)是最基本的知識(shí)之一,但是很多開(kāi)發(fā)者對(duì)于數(shù)據(jù)庫(kù)的了解僅限于使用上面,對(duì)于其內(nèi)部的很多定義和知識(shí),并不是十分清楚,那么,我們就來(lái)看一看數(shù)據(jù)庫(kù)的一些相關(guān)知識(shí)吧。

一、SQL標(biāo)準(zhǔn)有幾個(gè)版本

SQL(Structure Query Language)結(jié)構(gòu)化查詢語(yǔ)言是數(shù)據(jù)庫(kù)的核心語(yǔ)言,所有的結(jié)構(gòu)化數(shù)據(jù)庫(kù)都離不開(kāi)SQL語(yǔ)言的幫助,從誕生到現(xiàn)在,SQL標(biāo)準(zhǔn)發(fā)生了一系列變化。其歷史沿革如下。

1986年,ANSI X3.135-1986,ISO/IEC 9075:1986,SQL-86

1989年,ANSI X3.135-1989ISO/IEC 9075:1989,SQL-89

1992年,ANSI X3.135-1992,ISO/IEC 9075:1992SQL-92SQL2

1999年,ISO/IEC 9075:1999SQL:1999SQL3

2003年,ISO/IEC 9075:2003,SQL:2003

2008年,ISO/IEC 9075:2008,SQL:2008

2011年,ISO/IEC 9075:2011SQL:2011

2016ISO又對(duì)SQL標(biāo)準(zhǔn)做了補(bǔ)充修訂。

二、CatalogSchema的區(qū)別是什么

很多人建了數(shù)據(jù)庫(kù)之后,就只對(duì)表進(jìn)行操作,對(duì)于數(shù)據(jù)庫(kù)的一些結(jié)構(gòu)一知半解,尤其是很多人其實(shí)不明白Schema到底是個(gè)啥意思。下面我們具體來(lái)看一看。

Catalog直譯為產(chǎn)品目錄或編目,包含所有數(shù)據(jù)庫(kù)自有的Schema和用戶自建的Schema

Schema直譯為模式,可以理解為表空間,所有的數(shù)據(jù)庫(kù)對(duì)象(表、視圖、字段等)都包含在Schema里。

所以對(duì)于一個(gè)很容易重名的字段,例如用戶ID,他的完全限定名稱就是catalog.schema.表名.用戶ID。這樣就保證了命名不會(huì)沖突。

SQL標(biāo)準(zhǔn)的規(guī)定里面,Catalog包含Schema,還包含外部服務(wù)器信息、和外部數(shù)據(jù)封裝信息。而實(shí)際上各大關(guān)系數(shù)據(jù)庫(kù)廠商并沒(méi)有嚴(yán)格按歸標(biāo)準(zhǔn)來(lái)執(zhí)行,而且相互之間有很大差異。

例如:

MySQL里面,用server instance來(lái)取代catalog,作為數(shù)據(jù)庫(kù)的集合。而database==schema==catalog,作為數(shù)據(jù)表空間。

Oracle里面,server instance== database ==catalog,而Schema則是數(shù)據(jù)庫(kù)里的表空間,與用戶賬戶相關(guān)聯(lián)。

Postgresql里面,Server instance == db cluster是一系列數(shù)據(jù)庫(kù)的集合,database==catalog,是db cluster中的一個(gè)獨(dú)立數(shù)據(jù)庫(kù),schema則是database中的一個(gè)命名空間,可以讓用戶與其它用戶的數(shù)據(jù)區(qū)別開(kāi)來(lái)。在Postgresql里,對(duì)一個(gè)對(duì)象的完全限定是通過(guò)database.schema.object來(lái)實(shí)現(xiàn)的。

三、SQL語(yǔ)言包括幾個(gè)類(lèi)型

SQL語(yǔ)言大家都會(huì)寫(xiě),但是其中分成幾個(gè)部分,可能很多人就不是很清楚了。尤其是指針控制指令,可能一些人在自己的程序員生涯中壓根就沒(méi)接觸下。下面我們具體來(lái)看一看SQL語(yǔ)言包括的幾個(gè)類(lèi)型吧。

1、數(shù)據(jù)查詢語(yǔ)言(DQL: Data Query Language):例如select <字段> from <> where <條件>

2、數(shù)據(jù)操縱語(yǔ)言(DMLData Manipulation Language:例如Insert、Update、Delete

3、事務(wù)處理語(yǔ)言(DPLTransaction Processing Language:例如BEGIN TRANSACTION、COMMITROLLBACK

4、數(shù)據(jù)控制語(yǔ)言(DCLData Control Language):例如Grant、Revoke

5、數(shù)據(jù)定義語(yǔ)言(DDLData Definition Language:例如Create、Drop

6、指針控制語(yǔ)言(Cursor Control Language, CCL):例如DECLARE CURSOR、FETCH INTOUPDATE WHERE CURRENT

四、SQL語(yǔ)言中有幾種數(shù)據(jù)類(lèi)型

數(shù)據(jù)類(lèi)型大家都很清楚,但是在標(biāo)準(zhǔn)定義中的數(shù)據(jù)類(lèi)型,尤其是Interval類(lèi)型,可能很多人就不了解了。

SQL語(yǔ)言中包含三大類(lèi)數(shù)據(jù)類(lèi)型:預(yù)定義數(shù)據(jù)類(lèi)型、構(gòu)造數(shù)據(jù)類(lèi)型和自定義數(shù)據(jù)類(lèi)型。

其中預(yù)定義數(shù)據(jù)類(lèi)型包括7種類(lèi)型:數(shù)值、字符串、二進(jìn)制串、布爾、日期、間隔、XML

五、Limit關(guān)鍵字是所有數(shù)據(jù)庫(kù)通用的嗎

Limit關(guān)鍵字是很多人常用的,但是換了數(shù)據(jù)庫(kù),這個(gè)關(guān)鍵字還能正常使用嗎?答案是否定的。

Limit關(guān)鍵字并不是所有數(shù)據(jù)庫(kù)通用的,Sql server選擇前n條就是select top n。

六、MySQL里面的utf8字符集是“UTF-8”嗎?

很多初學(xué)者建數(shù)據(jù)庫(kù)的時(shí)候,想當(dāng)然就把字符集指定為utf8了,然后可能就會(huì)出現(xiàn)一些亂碼問(wèn)題,在中文互聯(lián)網(wǎng)界,可能問(wèn)題更容易出現(xiàn),為什么呢?

事實(shí)上,MySQL里面的utf8編碼并不是真正的UTF-8,而另外的utf8mb4才是真正的UTF-8編碼,因此使用MySQLMariaDB的時(shí)候,一定要把字符集設(shè)置成utf8mb4,否則可能會(huì)出現(xiàn)亂碼問(wèn)題。

為什么會(huì)出現(xiàn)這個(gè)問(wèn)題嗎?原因在于早期MySQL開(kāi)發(fā)的時(shí)候,由于節(jié)省空間以及效率等問(wèn)題,將utf8字符集限制為3個(gè)字節(jié),而實(shí)際最新的UTF-8規(guī)范使用14個(gè)字節(jié),這就導(dǎo)致MySQLutf8字符集無(wú)法兼容4個(gè)字節(jié)的編碼,最后在MySQL 5.5.3以后的版本中,發(fā)布了utf8mb4字符集來(lái)解決這個(gè)問(wèn)題。所以對(duì)于使用者來(lái)講,utf8字符集只用于兼容早期的數(shù)據(jù)庫(kù),而新開(kāi)發(fā)者都應(yīng)該使用utf8mb4字符集。

以上就是一些數(shù)據(jù)庫(kù)的相關(guān)知識(shí),大家之前都了解嗎?

活在信息時(shí)代的其它文章:

程序員必備技能之?dāng)?shù)據(jù)庫(kù)的一點(diǎn)小事

好貼收藏:程序員必備技能之正則表達(dá)式

Google Docs的神奇bug,只需要重復(fù)幾下這個(gè)常用單詞就會(huì)崩潰

是哪些人,在實(shí)踐中華田園敏捷?

大數(shù)據(jù)最主要的三個(gè)工程問(wèn)題,弄懂之后年薪百萬(wàn)不是夢(mèng)

程序員不可不知的幾種軟件項(xiàng)目,看看你的項(xiàng)目屬于哪一種?

程序員的三重境界,看看你在哪一重

    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類(lèi)似文章 更多