公司同時使用 SQL Server 與 MySQL,管理數十台伺服器、上百個資料庫。本系列記錄從 SQL Server 視角轉向 MySQL 的語法差異、操作習慣調整與避坑經驗。第一期聚焦基礎 DDL 語法對比。
| 操作 | SQL Server | MySQL | 關鍵差異 |
|---|---|---|---|
| 預設約束 | DEFAULT (0) | DEFAULT 0(無括號) | MySQL DEFAULT 後不加括號 |
| 自增主鍵 | ID INT IDENTITY(1,1) PRIMARY KEY | ID INT AUTO_INCREMENT PRIMARY KEY | MySQL 自增列必須是主鍵,種子值在表尾設定 |
| 查看表結構 | sp_help 'emp' | DESC emp / SHOW CREATE TABLE emp | |
| 修改表名 | EXEC sp_rename 'emp', 'emp2' | RENAME TABLE emp TO emp2; / ALTER TABLE emp RENAME emp2; | |
| 修改欄位型別 | ALTER TABLE emp2 ALTER COLUMN id BIGINT | ALTER TABLE emp2 MODIFY id BIGINT; | |
| 修改欄位名 | EXEC sp_rename 'emp2.id', 'iid', 'COLUMN' | ALTER TABLE emp2 CHANGE id iid BIGINT;(需指定型別) | MySQL CHANGE 需帶型別,可同時改名與型別 |
| 新增欄位指定位置 | 不支援 | ALTER TABLE emp2 ADD name VARCHAR(50) FIRST; / AFTER col | MySQL 支援 FIRST/AFTER 定位 |
| 刪除欄位 | ALTER TABLE emp2 DROP COLUMN name | ALTER TABLE emp2 DROP name;(無 COLUMN 關鍵字) | |
| 刪除外鍵約束 | ALTER TABLE emp2 DROP CONSTRAINT fk_name(通用) | ALTER TABLE emp2 DROP FOREIGN KEY fk_name;(專用) | MySQL 外鍵/主鍵需專用語法 |
| 刪除主鍵約束 | ALTER TABLE emp2 DROP CONSTRAINT pk_name | ALTER TABLE emp2 DROP PRIMARY KEY; | |
| 刪除多張表 | 需逐張 DROP TABLE + 判斷 | DROP TABLE IF EXISTS emp1, emp2; | MySQL 支援多表一次刪除 |
-- 1. 建表含自增主鍵
CREATE TABLE emp (
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(50),
dept_id INT
) AUTO_INCREMENT = 1000; -- 設定起始種子
-- 2. 查看結構
DESC emp;
SHOW CREATE TABLE emp;
-- 3. 修改表名
RENAME TABLE emp TO emp2;
-- 4. 修改欄位型別
ALTER TABLE emp2 MODIFY id BIGINT;
-- 5. 修改欄位名(同時改型別)
ALTER TABLE emp2 CHANGE id iid BIGINT;
-- 6. 新增欄位指定位置
ALTER TABLE emp2 ADD email VARCHAR(100) AFTER name;
ALTER TABLE emp2 ADD created_at TIMESTAMP FIRST;
-- 7. 刪除欄位
ALTER TABLE emp2 DROP email;
-- 8. 刪除外鍵/主鍵
ALTER TABLE emp2 DROP FOREIGN KEY fk_emp_dept;
ALTER TABLE emp2 DROP PRIMARY KEY;
-- 9. 刪除多表
DROP TABLE IF EXISTS emp1, emp2;
AUTO_INCREMENT 欄位必須包含在主鍵或唯一索引中,否則報錯。CHANGE 必須帶型別:即使只改名,也要重複寫型別 CHANGE old new TYPE。DROP FOREIGN KEY 而非通用 DROP CONSTRAINT。lower_case_table_names=0),Windows 不區分。跨平台遷移必須統一規範。MySQL DDL 語法較 SQL Server 更靈活(FIRST/AFTER、多表 DROP、RENAME TABLE),但也有強制限制(自增必為主鍵、CHANGE 必帶型別、外鍵專用語法)。建立「雙平台語法速查卡」,養成先查 SHOW CREATE TABLE 再動手的習慣,可大幅減少遷移期錯誤。