萬盛學電腦網

您现在的位置: 萬盛學電腦網 >> 程式設計 >  >> 資料庫 >> MySQL 教學

MySQL ALTER TABLE 修改欄位名、長度、型別、索引完整語法大全

核心語法:ALTER TABLE

ALTER TABLE 表名 操作類型 具體定義;

常用操作分類

1. 新增欄位

-- 末尾新增,允許 NULL
ALTER TABLE user ADD COLUMN new_col VARCHAR(20) DEFAULT NULL;

-- 末尾新增,NOT NULL 需給預設值
ALTER TABLE user ADD COLUMN new_col2 VARCHAR(20) NOT NULL DEFAULT '';

-- 指定位置新增(FIRST / AFTER col_name)
ALTER TABLE user ADD COLUMN new_col3 INT FIRST;
ALTER TABLE user ADD COLUMN new_col4 INT AFTER username;

2. 刪除欄位

ALTER TABLE user DROP COLUMN new_col2;

3. 修改欄位定義(型別、長度、預設值、註解)

-- MODIFY:只改定義,不改名
ALTER TABLE user MODIFY COLUMN name VARCHAR(50) NOT NULL DEFAULT '' COMMENT '用戶名';

-- CHANGE:改名 + 改定義(舊名 新名 定義)
ALTER TABLE user CHANGE COLUMN name username VARCHAR(50) NOT NULL DEFAULT '' COMMENT '用戶名';

4. 重命名表

ALTER TABLE old_name RENAME TO new_name;
-- 或
RENAME TABLE old_name TO new_name;

5. 索引操作

-- 普通索引
ALTER TABLE user ADD INDEX idx_email (email);
ALTER TABLE user ADD INDEX idx_name_age (name, age);

-- 唯一索引
ALTER TABLE user ADD UNIQUE INDEX uk_email (email);

-- 主鍵
ALTER TABLE user ADD PRIMARY KEY (id);
-- 或建表時指定:id INT PRIMARY KEY AUTO_INCREMENT

-- 全文索引
ALTER TABLE articles ADD FULLTEXT INDEX ft_title_body (title, body);

-- 刪除索引
ALTER TABLE user DROP INDEX idx_email;
-- 主鍵刪除
ALTER TABLE user DROP PRIMARY KEY;

6. 外鍵操作

-- 新增
ALTER TABLE orders ADD CONSTRAINT fk_orders_user 
    FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE;

-- 刪除
ALTER TABLE orders DROP FOREIGN KEY fk_orders_user;

7. 修改表選項

-- 修改引擎
ALTER TABLE user ENGINE = InnoDB;

-- 修改字元集(僅影響新欄位,舊欄位需 CONVERT TO)
ALTER TABLE user CHARSET = utf8mb4;
-- 全表轉換(含資料重新編碼)
ALTER TABLE user CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;

-- 修改自增起始值
ALTER TABLE user AUTO_INCREMENT = 10000;

實戰範例:批次修改多個欄位

ALTER TABLE products
    CHANGE COLUMN `desc` `description` TEXT COMMENT '商品描述',
    MODIFY COLUMN price DECIMAL(10,2) NOT NULL DEFAULT 0.00 COMMENT '價格',
    ADD COLUMN `status` TINYINT NOT NULL DEFAULT 1 COMMENT '狀態' AFTER price,
    ADD INDEX idx_status (`status`),
    DROP COLUMN old_field;

關鍵注意事項

項目說明
鎖表行為MySQL 5.6+ 線上 DDL (Online DDL) 多數操作不鎖表或短暫鎖,但 CHANGE COLUMN、MODIFY COLUMN 可能仍需重建表
大表修改百萬行以上建議用 pt-online-schema-change 或 gh-ost 零停機變更
資料截斷縮短 VARCHAR 長度或改更小型別前,先檢查現有資料長度
外鍵依賴修改被引用欄位需先刪除外鍵
權限需 ALTER、CREATE、INSERT 權限

查看表結構驗證

SHOW CREATE TABLE user\G
DESC user;
SHOW INDEX FROM user;
copyright © 萬盛學電腦網 all rights reserved