ALTER TABLE 是用于修改表结构的核心 SQL 语句,支持增删改列、调类型、重命名、删约束等操作;各数据库语法略有差异,生产环境需谨慎执行并提前测试。

ALTER TABLE 是 SQL 中用于修改已有表结构的核心语句,支持添加、删除、修改列,更改数据类型,添加或删除约束等操作。不同数据库(如 MySQL、PostgreSQL、SQL Server)语法略有差异,但基础用法高度一致。
添加新列
使用 ADD COLUMN(MySQL/PostgreSQL)或简写 ADD(SQL Server)向表中插入一列:
- MySQL / PostgreSQL:ALTER TABLE users ADD COLUMN phone VARCHAR(20);
- SQL Server:ALTER TABLE users ADD phone VARCHAR(20);
- 若需指定位置(仅 MySQL 支持):ADD COLUMN email VARCHAR(100) AFTER name;
修改列定义
更改列的数据类型、长度或是否允许 NULL,注意可能因数据不兼容而失败:
- MySQL:ALTER TABLE users MODIFY COLUMN age TINYINT UNSIGNED; 或 CHANGE COLUMN old_name new_name VARCHAR(50);
- PostgreSQL:ALTER TABLE users ALTER COLUMN status TYPE VARCHAR(20);
- SQL Server:ALTER TABLE users ALTER COLUMN status NVARCHAR(20);
重命名列或表
列重命名不是标准 SQL,各数据库实现不同:
- MySQL:ALTER TABLE users CHANGE COLUMN user_name username VARCHAR(50);
- PostgreSQL:ALTER TABLE users RENAME COLUMN user_name TO username;
- SQL Server:EXEC sp_rename 'users.user_name', 'username', 'COLUMN';
- 重命名整张表:ALTER TABLE users RENAME TO members;(PostgreSQL),MySQL 用 RENAME TABLE users TO members;
删除列与约束
删除列会同时清除该列所有数据,不可逆,建议先备份:
- MySQL / PostgreSQL:ALTER TABLE users DROP COLUMN temp_flag;
- SQL Server:ALTER TABLE users DROP COLUMN temp_flag;
- 删除主键:ALTER TABLE users DROP PRIMARY KEY;(MySQL),PostgreSQL 需指定约束名:DROP CONSTRAINT users_pkey;
- 删除外键约束前,先查约束名(如 SELECT constraint_name FROM information_schema.key_column_usage WHERE table_name='users';)
基本上就这些。实际操作前务必在测试环境验证,生产库执行 ALTER TABLE 可能锁表或耗时较长,尤其大表加索引或改类型时需谨慎安排窗口期。










