修改表
ALTER TABLE 用于修改已有表的结构——加列、删列、改类型、重命名。
建表不是一锤子买卖。业务在发展,需求在变化。广州飞翔科技刚起步时,员工表只需要姓名和基本工资就够了。后来业务扩展了,要加绩效奖金、社保扣除、个税计算,还得补上账户余额。这时候如果删表重建,已有数据就全丢了;ALTER TABLE 正是为了解决这个痛点——在保留数据的同时演进结构。
常见的操作有:ADD(新增列或约束)、DROP COLUMN(删除列)、MODIFY COLUMN(修改列类型或约束)、CHANGE COLUMN(重命名列)、RENAME TO(重命名整个表)。要注意的是,修改已有列的数据类型时,如果新类型装不下旧数据(比如把 VARCHAR(100) 缩成 VARCHAR(20)),数据库会直接拒绝,保护你的数据不被截断。
标准写法:
-- 添加新列
ALTER TABLE 表名 ADD 列名 数据类型 约束;
-- 删除列
ALTER TABLE 表名 DROP COLUMN 列名;
-- 修改列类型
ALTER TABLE 表名 MODIFY COLUMN 列名 新数据类型 新约束;
以飞翔科技为例。员工表随着公司发展需要不断调整:
-- 业务扩展,需要记录员工账户余额
ALTER TABLE employees
ADD account_balance DECIMAL(10,2) DEFAULT 0.00
COMMENT '员工账户余额,发工资后累加';
-- 公司升级为集团,名称需要更新
ALTER TABLE employees
MODIFY COLUMN company_name VARCHAR(100) DEFAULT '广州飞翔科技集团有限公司';
-- 查看修改后的表结构
DESC employees;
新增的 account_balance 列默认值为 0.00,已有的老员工记录会自动填上这个默认值,不会出现 NULL。公司名称的默认值也一并更新了——下次插入新员工时,company_name 会自动使用新的集团名称。整个过程数据毫发无损,这就是 ALTER TABLE 的优雅之处。