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

MySQL ALTER TABLE 完整語法與實戰用法大全

     編輯:MySQL 資料庫相關知識

語法骨架

ALTER [IGNORE] TABLE tbl_name alter_spec [, alter_spec ...]

alter_spec:
  ADD [COLUMN] col_def [FIRST | AFTER col_name]
  | ADD INDEX [idx_name] (col_list)
  | ADD PRIMARY KEY (col_list)
  | ADD UNIQUE [idx_name] (col_list)
  | ALTER [COLUMN] col_name {SET DEFAULT val | DROP DEFAULT}
  | CHANGE [COLUMN] old_col_name col_def
  | MODIFY [COLUMN] col_def
  | DROP [COLUMN] col_name
  | DROP PRIMARY KEY
  | DROP INDEX idx_name
  | RENAME [AS] new_tbl_name
  | table_options

核心機制

  • 建立臨時表副本 → 修改副本 → 刪除原表 → 重命名副本
  • 修改期間原表可讀,寫入阻塞至新表就緒
  • 需 SELECT/INSERT/DELETE/UPDATE/CREATE/DROP 權限

常用操作實例

操作SQL 範例
重命名表ALTER TABLE t1 RENAME t2;
修改列類型(同名)ALTER TABLE t2 MODIFY a TINYINT NOT NULL;
修改列類型並重命名ALTER TABLE t2 CHANGE b c CHAR(20);
新增列到指定位置ALTER TABLE t2 ADD d TIMESTAMP FIRST;
ALTER TABLE t2 ADD e INT AFTER c;
新增索引/主鍵ALTER TABLE t2 ADD INDEX (d), ADD PRIMARY KEY (a);
刪除列ALTER TABLE t2 DROP COLUMN c;
新增 AUTO_INCREMENT 列ALTER TABLE t2 ADD c INT UNSIGNED NOT NULL AUTO_INCREMENT, ADD INDEX (c);
修改默認值ALTER TABLE t2 ALTER COLUMN d SET DEFAULT CURRENT_TIMESTAMP;
刪除索引ALTER TABLE t2 DROP INDEX idx_name;
刪除主鍵ALTER TABLE t2 DROP PRIMARY KEY;
更改存儲引擎ALTER TABLE t2 ENGINE=InnoDB;

注意事項

  • IGNORE:唯一鍵衝突時保留首行刪除其餘;不加則回滾
  • 單條語句可包含多個 ADD/ALTER/DROP/CHANGE(MySQL 擴展)
  • CHANGE 需指定舊名、新名、類型;MODIFY 僅改類型
  • 縮短列長度受限於現有索引前綴長度
  • FOREIGN KEY/CHECK/REFERENCES 僅語法兼容,不生效
  • 僅 RENAME 時不建臨時表,直接改文件名

C API 獲取影響行數

mysql_info()  -- 返回複製行數、刪除重複行數
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved