首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> MySQL 資料庫 >> MySQL 綜合教學

MySQL 與 ANSI SQL 標準相容性差異詳解 (上)

     編輯:MySQL 綜合教學

MySQL 專有擴充語法

MySQL 包含多項非標準擴充,使用時需注意可移植性。可透過 /*! ... */ 註釋語法讓其他資料庫忽略:

SELECT /*! STRAIGHT_JOIN */ col FROM t1, t2 WHERE ...
CREATE /*!32302 TEMPORARY */ TABLE t (a INT);

資料型別與屬性差異

  • 專有型別:MEDIUMINT, SET, ENUM、多種 BLOB/TEXT。
  • 專有屬性:AUTO_INCREMENT, BINARY, UNSIGNED, ZEROFILL。
  • 字串比較預設不分大小寫 (依字元集),可用 BINARY 強制區分。

資料庫與物件命名規則

  • 資料庫對應目錄,資料表對應檔案,故大小寫敏感度取決於檔案系統 (Unix 區分,Windows 不區分)。
  • 名稱可數字開頭,但不可純數字。
  • 支援 db_name.tbl_name 跨庫存取,不支援表空間語法。

SQL 語句擴充功能

功能說明
LIKE 用於數值欄位標準 SQL 僅限字串
INTO OUTFILE / STRAIGHT_JOIN匯出檔案 / 指定聯結順序
SQL_SMALL_RESULT提示優化器結果集較小
EXPLAIN SELECT顯示執行計畫
CREATE TABLE ... INDEX/KEY建表時直接定義索引與前綴索引
TEMPORARY / IF NOT EXISTS臨時表與避免重複建立
COUNT(DISTINCT col1, col2)多欄位去重計數
ALTER TABLE ... CHANGE/DROP INDEX彈性修改欄位與索引
DROP TABLE IF EXISTS / 多表刪除安全刪除
DELETE ... LIMIT限制刪除筆數
INSERT/REPLACE ... DELAYED延遲寫入
LOW_PRIORITY降低更新優先權
LOAD DATA INFILE高速匯入 (相容 Oracle 語法)
OPTIMIZE TABLE / SHOW維護與資訊查詢
字串雙引號 / \ 跳脫標準僅單引號
SET OPTION會話變數設定
GROUP BY 可省略選取欄位效能優化
函數別名支援 (ANSI/ODBC)如 CONCAT 等

運算子與函數差異

  • ||、&& 為邏輯 OR/AND (C 風格),字串串接請用 CONCAT()。
  • % 等同 MOD()。
  • 比較運算子可用於 SELECT 選取清單:SELECT col1=1 FROM t;。
  • 專有函數:LAST_INSERT_ID(), REGEXP, BIT_COUNT(), IF(), PASSWORD(), MD5(), ENCODE/DECODE, PERIOD_ADD/DIFF, TO_DAYS, WEEKDAY, TRIM(多字元), STD/BIT_OR/BIT_AND, REPLACE 等。

ANSI 模式 (--ansi) 行為變更

  • || 改為字串串接。
  • 函數名與括號間允許空格,函數名成為保留字。
  • " 成為識別碼引號 (如 `)。
  • REAL 同義 FLOAT 而非 DOUBLE。

與 ANSI SQL92 差異摘要

  • -- 註釋需後接空白。
  • VARCHAR 儲存時移除尾部空格。
  • CHAR 某情況靜默轉為 VARCHAR。
  • DROP TABLE 不自動撤銷權限,需顯式 REVOKE。

目前不支援的標準功能

  • 子查詢:需改寫為 JOIN、臨時表或程式語言處理。
  • SELECT ... INTO TABLE:改用 INSERT INTO ... SELECT 或 CREATE TABLE ... SELECT。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved