首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

MySQL 與標準 SQL 相容性差異全景圖

     編輯:MySQL 資料庫相關知識

可移植寫法:條件註釋

利用 /*! ... */ 包裹 MySQL 專屬語法,其他 DB 視為註釋忽略:

SELECT /*! STRAIGHT_JOIN */ col FROM t1, t2 WHERE ...
CREATE /*!32302 TEMPORARY */ TABLE t (a INT);  -- 僅 3.23.02+ 執行

MySQL 專屬擴充清單

資料類型

  • MEDIUMINT、SET、ENUM、多種 BLOB/TEXT 亞型

欄位屬性

  • AUTO_INCREMENT、BINARY、UNSIGNED、ZEROFILL

字串比較預設不分大小寫

依字符集排序(預設 latin1),需區分大小寫請用 BINARY 屬性或 BINARY 強制轉換。

資料庫/表對應檔案系統目錄/檔案

  • 區分大小寫的 OS(Linux/Unix)上,資料庫/表名嚴格區分大小寫。
  • 建議統一採用小寫命名慣例。
  • 可直接用 OS 命令備份/重命名/移動/複製表檔(.MYD/.MYI/.frm)。

跨庫存取語法

db_name.tbl_name 直接存取其他資料庫表,無 TABLESPACE 概念。

查詢語法擴充

  • LIKE 可用於數值欄位。
  • SELECT ... INTO OUTFILE、STRAIGHT_JOIN、SQL_SMALL_RESULT。
  • EXPLAIN SELECT 輸出連接計畫。

DDL 擴充

  • CREATE TABLE:INDEX/KEY、前綴索引、TEMPORARY、IF NOT EXISTS。
  • ALTER TABLE:CHANGE/DROP COLUMN、DROP INDEX、IGNORE、多 ADD/ALTER/DROP/CHANGE 合併單語句。
  • DROP TABLE IF EXISTS、單語句刪多表。

DML 擴充

  • DELETE ... LIMIT、INSERT/REPLACE ... DELAYED、LOW_PRIORITY、LOAD DATA INFILE(相容 Oracle 語法)、OPTIMIZE TABLE。

資訊查詢

  • SHOW 系列指令(資料庫/表/欄位/索引/狀態/程序等)。

遷移建議

開發階段以標準 SQL 為基準,MySQL 專屬功能以條件註釋隔離,定期在 PostgreSQL/SQLite 上跑測試套件驗證可移植性。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved