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

MySQL表結構變更全攻略:ALTER TABLE 重命名、增刪改列、索引約束與引擎變更實戰

     編輯:MySQL 資料庫相關知識

表重命名

ALTER TABLE student RENAME person;           -- 標準語法
RENAME TABLE old_name TO new_name;           -- 替代語法,支持多表重命名

列屬性變更

修改數據類型/長度

ALTER TABLE person MODIFY name VARCHAR(20);  -- 僅修改類型/長度

修改列名(必須指定類型)

ALTER TABLE person CHANGE stu_name name VARCHAR(25);  -- 舊名 新名 類型
-- 同名修改類型:CHANGE name name VARCHAR(30)

提示:CHANGE可同時改名和改類型,MODIFY僅改類型。兩者均需完整聲明類型。

新增列

無約束列

ALTER TABLE person ADD sex BOOLEAN;

帶約束列

ALTER TABLE person ADD age INT NOT NULL;

指定位置

ALTER TABLE person ADD num INT PRIMARY KEY FIRST;           -- 表頭
ALTER TABLE person ADD birth DATE AFTER name;               -- 指定列後

注意:列順序不影響存儲性能,僅影響SELECT *顯示順序與INSERT隱式列順序。

約束管理

新增主鍵/唯一鍵/外鍵

ALTER TABLE person ADD PRIMARY KEY (id);
ALTER TABLE score ADD CONSTRAINT fk_score_stu FOREIGN KEY (stu_id) REFERENCES student(id);

刪除約束

ALTER TABLE person DROP PRIMARY KEY;                    -- 主鍵無名,直接刪除
ALTER TABLE student3 DROP FOREIGN KEY fk_score_stu;     -- 外鍵需指定名稱

關鍵:刪除有關聯表前必須先刪外鍵。刪除後外鍵列變為普通列。

存儲引擎變更(高風險操作)

ALTER TABLE user ENGINE = InnoDB;

⚠️ 警告:大表變更引擎會全表重建、鎖表、產生大量Binlog、主從延遲。生產環境必須:

  • 低峰期執行
  • 使用pt-online-schema-change或gh-ost在線DDL工具
  • 提前備份、驗證回滾預案

列位置調整

ALTER TABLE person MODIFY id INT FIRST;                   -- 移至首列
ALTER TABLE person MODIFY name VARCHAR(25) AFTER id;      -- 移至指定列後

最佳實踐檢查清單

  1. 執行前DESC table確認現狀
  2. 大表使用在線DDL工具
  3. 變更後SHOW CREATE TABLE驗證
  4. 監控INFORMATION_SCHEMA.INNODB_TRX長事務

ALTER TABLE是DBA最高頻操作,熟練掌握各子句語法與風險控制,是數據庫穩定運行的保障。

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