MySQL對(duì)標(biāo)準(zhǔn)SQL的擴(kuò)展方式
MySQL對(duì)標(biāo)準(zhǔn)SQL的擴(kuò)展
MySQL服務(wù)器支持一些其他SQL數(shù)據(jù)庫(kù)管理系統(tǒng)中不太可能找到的擴(kuò)展功能。請(qǐng)注意,如果您使用這些擴(kuò)展功能,您的代碼可能無(wú)法在其他SQL服務(wù)器上移植。
在某些情況下,您可以編寫(xiě)包含MySQL擴(kuò)展功能但仍然可移植的代碼,通過(guò)使用以下形式的注釋?zhuān)?/p>
/*! MySQL-specific code */
在這種情況下,MySQL服務(wù)器解析并執(zhí)行注釋中的代碼,就像處理任何其他SQL語(yǔ)句一樣,但其他SQL服務(wù)器應(yīng)該忽略這些擴(kuò)展功能。
例如,MySQL服務(wù)器可以識(shí)別以下語(yǔ)句中的STRAIGHT_JOIN關(guān)鍵字,但其他服務(wù)器則不會(huì):
SELECT /*! STRAIGHT_JOIN */ col1 FROM table1,table2 WHERE ...
如果在'!'字符之后添加版本號(hào),那么注釋中的語(yǔ)法只有在MySQL版本大于或等于指定的版本號(hào)時(shí)才會(huì)執(zhí)行。
以下注釋中的KEY_BLOCK_SIZE子句僅在MySQL 5.1.10或更高版本的服務(wù)器上執(zhí)行:
CREATE TABLE t1(a INT, KEY (a)) /*!50110 KEY_BLOCK_SIZE=1024 */;
以下描述按照類(lèi)別列出了MySQL的擴(kuò)展功能:
磁盤(pán)上的數(shù)據(jù)組織方式
MySQL服務(wù)器將每個(gè)數(shù)據(jù)庫(kù)映射到MySQL數(shù)據(jù)目錄下的一個(gè)目錄,并將數(shù)據(jù)庫(kù)中的表映射到數(shù)據(jù)庫(kù)目錄中的文件名。因此,在具有區(qū)分大小寫(xiě)文件名的操作系統(tǒng)上(例如大多數(shù)Unix系統(tǒng)),MySQL服務(wù)器中的數(shù)據(jù)庫(kù)和表名區(qū)分大小寫(xiě)。
通用語(yǔ)言語(yǔ)法
- 默認(rèn)情況下,字符串可以用雙引號(hào) " 或單引號(hào) ' 括起來(lái)。如果啟用了ANSI_QUOTES SQL模式,則字符串只能用單引號(hào) ' 括起來(lái),而服務(wù)器將雙引號(hào)括起來(lái)的字符串解釋為標(biāo)識(shí)符。
- \ 是字符串中的轉(zhuǎn)義字符。
- 在SQL語(yǔ)句中,您可以使用db_name.tbl_name語(yǔ)法訪(fǎng)問(wèn)不同數(shù)據(jù)庫(kù)中的表。一些SQL服務(wù)器提供相同的功能,但將其稱(chēng)為用戶(hù)空間。MySQL服務(wù)器不支持類(lèi)似以下語(yǔ)句中使用的表空間:CREATE TABLE ralph.my_table ... IN my_tablespace。
SQL語(yǔ)句語(yǔ)法
- ANALYZE TABLE、CHECK TABLE、OPTIMIZE TABLE和REPAIR TABLE語(yǔ)句。
- CREATE DATABASE、DROP DATABASE和ALTER DATABASE語(yǔ)句。
- DO語(yǔ)句。
- 使用EXPLAIN SELECT語(yǔ)句可以獲取查詢(xún)優(yōu)化器處理表的描述。
- FLUSH和RESET語(yǔ)句。
- SET語(yǔ)句。
- SHOW語(yǔ)句。許多MySQL特定的SHOW語(yǔ)句產(chǎn)生的信息可以通過(guò)使用SELECT查詢(xún)INFORMATION_SCHEMA以更標(biāo)準(zhǔn)的方式獲得。
- LOAD DATA的用法。在許多情況下,此語(yǔ)法與Oracle的LOAD DATA兼容。
- RENAME TABLE的用法。
- 使用REPLACE而不是DELETE加INSERT的用法。
- 在ALTER TABLE語(yǔ)句中使用CHANGE col_name、DROP col_name、DROP INDEX、IGNORE或RENAME的用法。在ALTER TABLE語(yǔ)句中使用多個(gè)ADD、ALTER、DROP或CHANGE子句的用法。
- 在CREATE TABLE語(yǔ)句中使用索引名稱(chēng)、創(chuàng)建列前綴索引、以及使用INDEX或KEY的用法。
- 在CREATE TABLE語(yǔ)句中使用TEMPORARY或IF NOT EXISTS的用法。
- 使用IF EXISTS的用法在DROP TABLE和DROP DATABASE語(yǔ)句中。
- 使用單個(gè)DROP TABLE語(yǔ)句刪除多個(gè)表的功能。
- UPDATE和DELETE語(yǔ)句中的ORDER BY和LIMIT子句的用法。
- INSERT INTO tbl_name SET col_name = ...語(yǔ)法的用法。
- INSERT和REPLACE語(yǔ)句的DELAYED子句的用法。
- 在SELECT語(yǔ)句中使用INTO OUTFILE或INTO DUMPFILE的用法。
- 在SELECT語(yǔ)句中使用STRAIGHT_JOIN或SQL_SMALL_RESULT等選項(xiàng)的用法。
- 在GROUP BY子句中不需要為所有選擇的列命名。這對(duì)于一些非常特定但相當(dāng)常見(jiàn)的查詢(xún)可以提供更好的性能。
- 可以在GROUP BY子句中使用ASC和DESC來(lái)指定排序順序,而不僅僅是在ORDER BY子句中使用。
- 使用:=賦值運(yùn)算符在語(yǔ)句中設(shè)置變量的能力。
數(shù)據(jù)類(lèi)型
- 中等整數(shù)類(lèi)型(MEDIUMINT),集合類(lèi)型(SET),枚舉類(lèi)型(ENUM),以及各種二進(jìn)制大對(duì)象(BLOB)和文本(TEXT)類(lèi)型。
- AUTO_INCREMENT(自動(dòng)遞增)、BINARY(二進(jìn)制)、NULL(空值)、UNSIGNED(無(wú)符號(hào))和ZEROFILL(填充零)是數(shù)據(jù)類(lèi)型的屬性。
函數(shù)和運(yùn)算符(Functions and operators)
- 為了方便從其他SQL環(huán)境遷移的用戶(hù),MySQL Server支持許多函數(shù)的別名。例如,所有字符串函數(shù)都支持標(biāo)準(zhǔn)SQL語(yǔ)法和ODBC語(yǔ)法。
- MySQL Server 中的 || 和 && 運(yùn)算符被理解為邏輯 OR 和 AND,在 C 編程語(yǔ)言中也是如此。在 MySQL Server 中,|| 和 OR 是同義詞,&& 和 AND 也是如此。由于這種優(yōu)雅的語(yǔ)法,MySQL Server 不支持標(biāo)準(zhǔn)的 SQL || 運(yùn)算符用于字符串連接;而是使用 CONCAT() 函數(shù)來(lái)進(jìn)行字符串連接。由于 CONCAT() 函數(shù)接受任意數(shù)量的參數(shù),因此很容易將使用 || 運(yùn)算符的代碼轉(zhuǎn)換為 MySQL Server 的語(yǔ)法。
- 使用 COUNT(DISTINCT value_list) 的情況是 value_list 包含多個(gè)元素。
- 字符串比較在默認(rèn)情況下是不區(qū)分大小寫(xiě)的,排序順序由當(dāng)前字符集的校對(duì)規(guī)則(默認(rèn)為utf8mb4)確定。若要執(zhí)行大小寫(xiě)敏感的比較,您可以在聲明列時(shí)使用BINARY屬性,或者使用BINARY轉(zhuǎn)換操作符,這樣比較將使用底層字符代碼值而不是詞法順序進(jìn)行。
- % 運(yùn)算符是 MOD() 的同義詞。也就是說(shuō),N % M 等同于 MOD(N, M)。% 運(yùn)算符支持給 C 程序員使用,并且與 PostgreSQL 兼容性保持一致。
- 在SELECT語(yǔ)句中,可以在輸出列列表(在FROM左側(cè))的表達(dá)式中使用=、<>, <=、<、>=、>、<<、>>、<=>、AND、OR或LIKE運(yùn)算符。
- 例如:
mysql> SELECT col1=1 AND col2=2 FROM my_table;
- LAST_INSERT_ID() 函數(shù)返回最近插入的 AUTO_INCREMENT 值。
- LIKE 運(yùn)算符允許在數(shù)值上使用。
- REGEXP和NOT REGEXP是擴(kuò)展正則表達(dá)式運(yùn)算符。它們用于在比較中使用正則表達(dá)式來(lái)匹配或排除模式。
- CONCAT() 或者 CHAR() 函數(shù)可以接受一個(gè)或多個(gè)參數(shù)。在 MySQL Server 中,這些函數(shù)可以接受可變數(shù)量的參數(shù)。
- BIT_COUNT()、CASE、ELT()、FROM_DAYS()、FORMAT()、IF()、MD5()、PERIOD_ADD()、PERIOD_DIFF()、TO_DAYS() 和 WEEKDAY() 是MySQL中可用的一些函數(shù)。
- 使用 TRIM() 函數(shù)來(lái)修剪子字符串。標(biāo)準(zhǔn) SQL 只支持刪除單個(gè)字符。
- GROUP BY 函數(shù)包括 STD()、BIT_OR()、BIT_AND()、BIT_XOR() 和 GROUP_CONCAT() 。
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
關(guān)于mysql基礎(chǔ)知識(shí)的介紹
本篇文章是對(duì)mysql的基礎(chǔ)知識(shí)進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下2013-06-06MySql中的IFNULL、NULLIF和ISNULL用法詳解
本文主要介紹了MySql中的IFNULL、NULLIF和ISNULL用法詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2023-03-03MySQL操作之JSON數(shù)據(jù)類(lèi)型操作詳解
這篇文章主要介紹了MySQL操作之JSON數(shù)據(jù)類(lèi)型操作詳解,內(nèi)容較為詳細(xì),具有收藏價(jià)值,需要的朋友可以參考。2017-10-10Mysql用戶(hù)權(quán)限分配實(shí)戰(zhàn)項(xiàng)目詳解
用戶(hù)是數(shù)據(jù)庫(kù)的使用者和管理者,MySQL通過(guò)用戶(hù)的設(shè)置來(lái)控制數(shù)據(jù)庫(kù)操作人員的訪(fǎng)問(wèn)與操作范圍,這篇文章主要給大家介紹了關(guān)于Mysql用戶(hù)權(quán)限分配實(shí)戰(zhàn)項(xiàng)目的相關(guān)資料,需要的朋友可以參考下2023-12-12mysql中insert語(yǔ)句的5種用法簡(jiǎn)單示例
這篇文章主要給大家介紹了關(guān)于mysql中insert語(yǔ)句的5種用法的相關(guān)資料,insert into是mysql中最常用的插入語(yǔ)句,文中通過(guò)代碼介紹的非常詳細(xì),需要的朋友可以參考下2023-08-08MySQL之union和union all的使用及區(qū)別說(shuō)明
這篇文章主要介紹了MySQL之union和union all的使用及區(qū)別說(shuō)明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-04-04mysql中各種常見(jiàn)join連表查詢(xún)實(shí)例總結(jié)
這篇文章主要介紹了mysql中各種常見(jiàn)join連表查詢(xún),結(jié)合實(shí)例形式總結(jié)分析了MySQL中join連表查詢(xún)的各種常見(jiàn)用法及相關(guān)操作注意事項(xiàng),需要的朋友可以參考下2020-02-02MySQL數(shù)據(jù)庫(kù)分庫(kù)分表的方案
隨著項(xiàng)目不斷迭代,使用人數(shù)的不斷增加,數(shù)據(jù)庫(kù)中某些表數(shù)據(jù)正在逐步膨脹,往單表千萬(wàn)迅速靠攏,,所以最近也在考慮做一下分庫(kù)分表,本文就給大家詳細(xì)講解了什么分庫(kù)分表和分庫(kù)分表的方案,需要的朋友可以參考下2023-11-11