使用以下功能將導致程式碼無法直接移植至其他資料庫 (PostgreSQL, Oracle, SQL Server 等)。
TINYINT, SMALLINT, MEDIUMINT, BIGINT (標準僅 SMALLINT, INTEGER, BIGINT)ENUM, SET (標準無對應)TINYBLOB, BLOB, MEDIUMBLOB, LONGBLOB / TINYTEXT, TEXT, MEDIUMTEXT, LONGTEXTYEAR, DATETIME, TIMESTAMP 精度與範圍差異AUTO_INCREMENT (標準:GENERATED AS IDENTITY)UNSIGNED, ZEROFILL, BINARYCHARACTER SET, COLLATE 細粒度指定| 功能 | MySQL 語法 | 標準/其他 DB |
|---|---|---|
| 建表選項 | CREATE TEMPORARY TABLE ... IF NOT EXISTS | 標準無 TEMPORARY、IF NOT EXISTS 部分支援 |
| 索引定義 | INDEX/KEY (col(prefix))、前綴索引 | 標準無前綴索引 |
| 修改表 | ALTER TABLE ... CHANGE/DROP COLUMN/INDEX 多子句合併 | 標準單一操作 |
| 刪除表 | DROP TABLE IF EXISTS t1, t2、DROP TEMPORARY TABLE | 標準單表、無 IF EXISTS (部分支援) |
| 查詢提示 | STRAIGHT_JOIN, SQL_SMALL_RESULT, SQL_BIG_RESULT | 標準無 |
| 匯出資料 | SELECT ... INTO OUTFILE | 標準無 |
| 取代插入 | REPLACE INTO (DELETE+INSERT) | 標準 MERGE (Oracle/SQL Server) |
| 延遲插入 | INSERT DELAYED | 標準無 (5.6+ 棄用,8.0 移除) |
| 低優先級 | LOW_PRIORITY (INSERT/UPDATE/DELETE) | 標準無 |
| 限制刪除 | DELETE ... LIMIT n | 標準無 |
| 變數賦值 | SELECT @a:=1, @b:=@a+1 | 標準無會話變數 |
| 顯示資訊 | SHOW DATABASES/TABLES/COLUMNS/STATUS/PROCESSLIST | 標準 INFORMATION_SCHEMA |
| 字串連接 | CONCAT(str1, str2, ...) 多參數 | 標準 || (MySQL || 為邏輯 OR) |
| 正則表達式 | REGEXP, NOT REGEXP | 標準 SIMILAR TO (部分支援) |
/*! ... */MySQL 解析並執行註解內 SQL,其他資料庫忽略:
-- 僅 MySQL 執行
SELECT /*! STRAIGHT_JOIN */ * FROM t1, t2 WHERE ...;
-- 版本條件:僅 3.23.02+ 執行
CREATE /*!32302 TEMPORARY */ TABLE t (a INT);
-- 條件建立索引
CREATE TABLE t (id INT, data VARCHAR(100), INDEX /*!50700 */ (data(10)));
應用:在通用 SQL 腳本中包裝 MySQL 專用優化,保持跨資料庫相容性。
| 功能 | 標準語法 | MySQL 替代方案 | 支援版本 |
|---|---|---|---|
| 子查詢 | WHERE col IN (SELECT ...) | JOIN、EXISTS、暫存表 | 4.1+ 完整支援 |
| CTE (通用表達式) | WITH cte AS (...) SELECT ... | 子查詢、檢視表、暫存表 | 8.0+ 支援 |
| 窗口函數 | ROW_NUMBER() OVER (...) | 變數模擬、自連接 | 8.0+ 支援 |
| 外鍵約束 | FOREIGN KEY ... REFERENCES ... ON DELETE CASCADE | InnoDB 支援,MyISAM 忽略 | 3.23+ InnoDB |
| 交易/儲存點 | BEGIN, COMMIT, ROLLBACK, SAVEPOINT | InnoDB 支援,LOCK TABLES 模擬 | 3.23+ InnoDB |
| 預存程序/觸發器 | CREATE PROCEDURE/TRIGGER | 應用層邏輯、事件排程器 | 5.0+ 支援 |
| 檢查約束 | CHECK (col > 0) | 觸發器驗證、應用層驗證 | 8.0.16+ 支援 |
| 資料域 | CREATE DOMAIN | 無直接對應 | 不支援 |
| 視圖更新 | WITH CHECK OPTION | 部分支援 | 5.0+ 部分 |
--ansi / sql_mode=ANSI) 行為變更| 項目 | 預設模式 | ANSI 模式 |
|---|---|---|
|| 運算子 | 邏輯 OR | 字串連接 (標準) |
| 函數名與括號間空格 | 不允許 | 允許 |
" 引號 | 字串常數 | 識別碼引號 (標準,同 `) |
REAL 型別 | DOUBLE 同義 | FLOAT 同義 (標準) |
| 保留字 | 部分 | 所有函數名成為保留字 |
| 版本 | 關鍵標準化里程碑 |
|---|---|
| 4.1 | 子查詢、衍生表 |
| 5.0 | 預存程序、觸發器、視圖、InnoDB 外鍵 |
| 5.7 | JSON、GIS、ONLY_FULL_GROUP_BY 預設開啟 |
| 8.0 | CTE、窗口函數、CHECK 約束、INTERSECT/EXCEPT、LATERAL、VALUES 陳述式、GENERATED AS IDENTITY |
MySQL 8.0 已支援絕大多數 SQL:2016 核心功能。新專案應以標準 SQL 為主,僅在效能關鍵路徑使用 MySQL 專用優化,並以條件註解隔離,實現「寫一次、多庫運行」的工程理想。