ALTER 修改表
ALTER TABLE 语句用于修改现有表的结构。本章介绍如何使用 ALTER TABLE 添加、删除或修改列和约束。
基本语法
sql
ALTER TABLE table_name
ADD | DROP | MODIFY | CHANGE column_definition;添加列
sql
-- 添加单列
ALTER TABLE users
ADD phone VARCHAR(20);
-- 添加多列
ALTER TABLE users
ADD phone VARCHAR(20),
ADD address VARCHAR(200);
-- 添加列并指定位置
ALTER TABLE users
ADD age INT AFTER name;
-- 添加列到第一位
ALTER TABLE users
ADD id INT FIRST;删除列
sql
-- 删除单列
ALTER TABLE users
DROP COLUMN phone;
-- 删除多列
ALTER TABLE users
DROP COLUMN phone,
DROP COLUMN address;修改列
MODIFY - 修改列定义
sql
-- 修改列类型
ALTER TABLE users
MODIFY age BIGINT;
-- 修改列并添加约束
ALTER TABLE users
MODIFY email VARCHAR(100) NOT NULL UNIQUE;CHANGE - 重命名并修改列
sql
-- 重命名列并修改类型
ALTER TABLE users
CHANGE old_name new_name VARCHAR(100);重命名表
sql
-- 重命名表
ALTER TABLE users
RENAME TO customers;
-- 或使用 RENAME TABLE
RENAME TABLE users TO customers;添加约束
sql
-- 添加主键
ALTER TABLE users
ADD PRIMARY KEY (id);
-- 添加外键
ALTER TABLE orders
ADD FOREIGN KEY (user_id) REFERENCES users(id);
-- 添加唯一约束
ALTER TABLE users
ADD UNIQUE (email);
-- 添加检查约束
ALTER TABLE users
ADD CHECK (age >= 18);删除约束
sql
-- 删除主键
ALTER TABLE users
DROP PRIMARY KEY;
-- 删除外键
ALTER TABLE orders
DROP FOREIGN KEY fk_user_id;
-- 删除索引
ALTER TABLE users
DROP INDEX idx_email;修改表选项
sql
-- 修改存储引擎
ALTER TABLE users ENGINE = InnoDB;
-- 修改字符集
ALTER TABLE users
CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
-- 修改自增起始值
ALTER TABLE users AUTO_INCREMENT = 1000;实战示例
添加时间戳字段
sql
ALTER TABLE users
ADD created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
ADD updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP;修改列为非空
sql
-- 先更新 NULL 值
UPDATE users SET email = 'default@example.com' WHERE email IS NULL;
-- 再修改列为非空
ALTER TABLE users
MODIFY email VARCHAR(100) NOT NULL;最佳实践
- 修改前备份数据
- 在非高峰期执行
- 大表修改使用在线 DDL
- 测试环境先验证
- 使用事务(如果支持)
小结
- ADD:添加列或约束
- DROP:删除列或约束
- MODIFY:修改列定义
- CHANGE:重命名并修改列
- RENAME:重命名表
下一步: 学习 DROP 删除表