MySQL 伺服器支援一些在其他 SQL DBMS 中不太可能找到的擴展。請注意,如果您使用它們,您的程式碼很可能無法移植到其他 SQL 伺服器。在某些情況下,您可以編寫包含 MySQL 擴展的程式碼,但仍然可以移植,方法是使用以下形式的註解:
/*! MySQL-specific code */在這種情況下,MySQL 伺服器會像解析其他 SQL 語句一樣解析並執行註解中的程式碼,但其他 SQL 伺服器應該忽略這些擴展。例如,MySQL 伺服器會識別以下語句中的 STRAIGHT_JOIN 關鍵字,但其他伺服器不應該識別:
SELECT /*! STRAIGHT_JOIN */ col1 FROM table1,table2 WHERE ...如果您在 ! 字元後新增版本號碼,則只有當 MySQL 版本大於或等於指定的版本號碼時,才會執行註解中的語法。以下註解中的 KEY_BLOCK_SIZE 子句僅由 MySQL 5.1.10 或更高版本的伺服器執行:
CREATE TABLE t1(a INT, KEY (a)) /*!50110 KEY_BLOCK_SIZE=1024 */;以下描述列出了 MySQL 擴展,依類別組織。
磁碟上資料的組織
MySQL 伺服器將每個資料庫對應到 MySQL 資料目錄下的目錄,並將資料庫中的表格對應到資料庫目錄中的檔案名稱。因此,在具有區分大小寫檔案名稱的作業系統(例如大多數 Unix 系統)上,MySQL 伺服器中的資料庫和表格名稱是區分大小寫的。請參閱 第 11.2.3 節,「識別符號的大小寫敏感度」。
一般語言語法
預設情況下,字串可以用
"以及'括起來。如果啟用ANSI_QUOTESSQL 模式,則字串只能用'括起來,並且伺服器會將用"括起來的字串解讀為識別符號。\是字串中的逸出字元。在 SQL 語句中,您可以使用
db_name.tbl_name語法存取不同資料庫中的表格。某些 SQL 伺服器提供相同的功能,但稱之為User space。MySQL 伺服器不支援像這樣語句中使用的表空間:CREATE TABLE ralph.my_table ... IN my_tablespace。
SQL 語句語法
CREATE DATABASE、DROP DATABASE和ALTER DATABASE語句。請參閱 第 15.1.12 節,「CREATE DATABASE 語句」、第 15.1.24 節,「DROP DATABASE 語句」 和 第 15.1.2 節,「ALTER DATABASE 語句」。DO語句。EXPLAIN SELECT以取得查詢最佳化器如何處理表格的描述。SET語句。請參閱 第 15.7.6.1 節,「設定變數分配的語法」。SHOW語句。請參閱 第 15.7.7 節,「SHOW 語句」。許多 MySQL 特有的SHOW語句產生的資訊可以透過使用SELECT來查詢INFORMATION_SCHEMA,以更標準的方式取得。請參閱 第 28 章,「INFORMATION_SCHEMA 表格」。使用
LOAD DATA。在許多情況下,此語法與 OracleLOAD DATA相容。請參閱 第 15.2.9 節,「LOAD DATA 語句」。使用
REPLACE取代DELETE加INSERT。請參閱 第 15.2.12 節,「REPLACE 語句」。在
ALTER TABLE語句中使用CHANGE、col_nameDROP或col_nameDROP INDEX、IGNORE或RENAME。在ALTER TABLE語句中使用多個ADD、ALTER、DROP或CHANGE子句。請參閱 第 15.1.9 節,「ALTER TABLE 語句」。在
CREATE TABLE語句中使用索引名稱、欄位前綴上的索引以及使用INDEX或KEY。請參閱 第 15.1.20 節,「CREATE TABLE 語句」。搭配
CREATE TABLE使用TEMPORARY或IF NOT EXISTS。搭配
DROP TABLE和DROP DATABASE使用IF EXISTS。能夠使用單一
DROP TABLE語句刪除多個表格。INSERT INTO語法。tbl_nameSETcol_name= ...在
SELECT語句中使用INTO OUTFILE或INTO DUMPFILE。請參閱 第 15.2.13 節,「SELECT 語句」。在
SELECT語句中使用諸如STRAIGHT_JOIN或SQL_SMALL_RESULT之類的選項。您不需要在
GROUP BY子句中命名所有選取的欄位。這對於某些非常特定但相當常見的查詢來說,可以提供更好的效能。請參閱第 14.19 節,「彙總函式」。您可以在
GROUP BY中指定ASC和DESC,而不僅僅是在ORDER BY中。能夠在語句中使用
:=賦值運算符來設定變數。請參閱第 11.4 節,「使用者定義變數」。
資料類型
函式和運算符
為了方便從其他 SQL 環境遷移的使用者,MySQL 伺服器支援許多函式的別名。例如,所有字串函式都支援標準 SQL 語法和 ODBC 語法。
MySQL 伺服器理解
||和&&運算符,表示邏輯 OR 和 AND,如同 C 程式語言中一樣。在 MySQL 伺服器中,||和OR是同義詞,&&和AND也是同義詞。由於這種簡潔的語法,MySQL 伺服器不支援標準 SQL 的||運算符用於字串串接;請改用CONCAT()。因為CONCAT()可以接受任意數量的引數,因此很容易將||運算符的使用轉換為 MySQL 伺服器。使用
COUNT(DISTINCT,其中value_list)value_list具有多個元素。預設情況下,字串比較不區分大小寫,排序順序由目前字元集的校對規則決定,預設值為
utf8mb4。若要改為執行區分大小寫的比較,您應該使用BINARY屬性宣告您的欄位,或使用BINARY轉換,這會導致比較是使用底層字元代碼值而不是語彙排序。%運算符是MOD()的同義詞。也就是說,等同於N%MMOD(。N,M)%支援 C 程式設計人員,並與 PostgreSQL 相容。=、<>、<=、<、>=、>、<<、>>、<=>、AND、OR或LIKE運算符可以被用於SELECT陳述式中輸出欄位列表(FROM的左側)的表達式中。例如mysql> SELECT col1=1 AND col2=2 FROM my_table;LAST_INSERT_ID()函式會傳回最近的AUTO_INCREMENT值。請參閱第 14.15 節,「資訊函式」。LIKE允許用於數值。REGEXP和NOT REGEXP延伸正規表示式運算符。CONCAT()或CHAR()帶有一個引數或超過兩個引數。(在 MySQL 伺服器中,這些函式可以接受可變數量的引數。)BIT_COUNT()、CASE、ELT()、FROM_DAYS()、FORMAT()、IF()、MD5()、PERIOD_ADD()、PERIOD_DIFF()、TO_DAYS()和WEEKDAY()函式。使用
TRIM()來修剪子字串。標準 SQL 僅支援移除單個字元。GROUP BY函式STD()、BIT_OR()、BIT_AND()、BIT_XOR()和GROUP_CONCAT()。請參閱第 14.19 節,「彙總函式」。