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

MySQL 與 SQL Server 差異系列(一):核心語法完整對比指南

     編輯:MySQL 資料庫相關知識

本文系統梳理 MySQL 與 SQL Server 在 DDL、DML、系統函數等核心語法上的 10 大關鍵差異,為跨平台遷移與雙資料庫開發提供快速參考。

1. DEFAULT 約束語法

-- SQL Server:需括號
CREATE TABLE emp (id INT DEFAULT(12));

-- MySQL:無需括號
CREATE TABLE emp (id INT DEFAULT 12);

2. 自增欄位 (Identity / AUTO_INCREMENT)

-- SQL Server:IDENTITY(種子, 遞增)
CREATE TABLE emp (id INT IDENTITY(1,1));

-- MySQL:AUTO_INCREMENT,必須為 PRIMARY KEY,種子在表選項設定
CREATE TABLE emp (
    id INT PRIMARY KEY AUTO_INCREMENT
) AUTO_INCREMENT = 100; -- 從 100 開始

-- MySQL 獲取自增值的 4 種方法:
-- 1. SELECT MAX(id) FROM emp -- 不推薦,高併發不準
-- 2. SELECT LAST_INSERT_ID() -- 會話級,安全但跨表無效
-- 3. SELECT @@IDENTITY -- 全域變數,連線關閉失效
-- 4. SHOW TABLE STATUS LIKE 'emp' -- 推薦,查看 Auto_increment 欄位

3. 查看表結構

-- SQL Server
EXEC sp_help 'emp';

-- MySQL
DESC emp;  -- 或 SHOW COLUMNS FROM emp;

4. 修改表名

-- SQL Server
EXEC sys.sp_rename @objname = N'emp', @newname = 'emp2';

-- MySQL
ALTER TABLE emp RENAME emp2;  -- 或 RENAME TABLE emp TO emp2;

5. 修改欄位資料類型

-- SQL Server
ALTER TABLE emp2 ALTER COLUMN id BIGINT;

-- MySQL
ALTER TABLE emp2 MODIFY id BIGINT;

6. 修改欄位名稱 (CHANGE 需同時指定類型)

-- SQL Server
EXEC sys.sp_rename @objname = N'emp2.id', @newname = 'iid', @objtype = 'column';

-- MySQL:CHANGE 舊名 新名 類型
ALTER TABLE emp2 CHANGE id iid BIGINT;
-- 僅改類型時新舊名相同
ALTER TABLE emp2 CHANGE id id BIGINT; -- 等同 MODIFY

7. 新增欄位 (支援位置指定)

-- SQL Server:僅能加在末尾
ALTER TABLE emp2 ADD name NVARCHAR(200) NULL;

-- MySQL:可指定 FIRST / AFTER 欄位名
ALTER TABLE emp2 ADD name NVARCHAR(200) NULL FIRST;
ALTER TABLE emp2 ADD age INT NULL AFTER name;

8. 刪除欄位

-- SQL Server:需 COLUMN 關鍵字
ALTER TABLE emp2 DROP COLUMN name;

-- MySQL:無需 COLUMN
ALTER TABLE emp2 DROP name;

9. 刪除約束 (外鍵/主鍵語法不同)

-- SQL Server:統一 DROP CONSTRAINT
ALTER TABLE emp2 DROP CONSTRAINT fk_emp_dept;

-- MySQL:分類明確
ALTER TABLE emp2 DROP FOREIGN KEY fk_emp_dept;  -- 外鍵
ALTER TABLE emp2 DROP PRIMARY KEY;              -- 主鍵

10. 刪除表 (MySQL 支援多表與 IF EXISTS)

-- SQL Server:需逐表判斷
IF OBJECT_ID('dbo.emp2') IS NOT NULL DROP TABLE dbo.emp2;

-- MySQL:單條語句多表、條件刪除
DROP TABLE IF EXISTS emp1, emp2;

總結對比表

操作SQL ServerMySQL關鍵差異
DEFAULTDEFAULT(值)DEFAULT 值括號
自增IDENTITY(1,1)AUTO_INCREMENT + PK種子設定位置、PK強制
改表名sp_renameRENAME TABLE / ALTER RENAME系統預存程序 vs DDL
改欄位名sp_renameCHANGE 老 新 類型MySQL需帶類型
加欄位位置不支援FIRST/AFTERMySQL靈活
刪約束DROP CONSTRAINTDROP FOREIGN KEY/PRIMARY KEYMySQL分類更細
批量刪表逐條判斷DROP TABLE IF EXISTS t1,t2MySQL簡潔

遷移建議

  1. 使用自動化工具(如 SQLines、AWS SCT)處理大量語法轉換
  2. 重點人工檢查:自增種子邏輯、外鍵名稱、預設值運算式、系統函數對應
  3. 建立雙向同步驗證機制,確保資料一致性
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved