MySQL 伺服器支援一些您不太可能在其他 SQL DBMS 中找到的擴展。請注意,如果您使用它們,您的程式碼很可能無法移植到其他 SQL 伺服器。在某些情況下,您可以編寫包含 MySQL 擴展的程式碼,但仍然可以透過使用以下形式的註解來移植
/*! MySQL-specific code */在這種情況下,MySQL 伺服器會像解析和執行任何其他 SQL 陳述式一樣解析和執行註解中的程式碼,但其他 SQL 伺服器應該忽略這些擴展。例如,MySQL 伺服器會識別下列陳述式中的 STRAIGHT_JOIN 關鍵字,但其他伺服器則不會
SELECT /*! STRAIGHT_JOIN */ col1 FROM table1,table2 WHERE ...如果在 ! 字元後新增版本號碼,則只有當 MySQL 版本大於或等於指定的版本號碼時,才會執行註解中的語法。只有 MySQL 5.1.10 或更高版本的伺服器才會執行下列註解中的 KEY_BLOCK_SIZE 子句
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 陳述式語法
ANALYZE TABLE、CHECK TABLE、OPTIMIZE TABLE和REPAIR TABLE陳述式。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 節「變數指派的 SET 語法」。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 陳述式」。將
TEMPORARY或IF NOT EXISTS與CREATE TABLE一起使用。將
IF EXISTS與DROP TABLE和DROP DATABASE一起使用。能夠使用單一
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 節,〈彙總函式〉。您可以將
ASC和DESC與GROUP BY一起指定,而不僅限於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 相容。在
SELECT陳述式的輸出欄位清單(FROM的左側)中,可以使用=、<>、<=、<、>=、>、<<、>>、<=>、AND、OR或LIKE運算子。例如: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 節,〈彙總函式〉。