MySQL里头怎么加字段还有改字段那些事儿,简单讲讲方法和步骤
- 问答
- 2025-12-27 02:55:21
- 3
这事儿其实挺常见的,比如你一开始设计一个用户表,只想了用户名和密码,后来发现还得记录每个人的年龄或者电话号码,这时候就需要加字段了,又或者,你发现电话号码字段设得太短了,有些国际长途存不进去,那就得改字段。
先说说怎么加个新字段
加字段用的是 ALTER TABLE 语句,后面跟着 ADD COLUMN,这个 ALTER TABLE 的意思就是“修改表”,ADD COLUMN 增加列”(在数据库里,字段也叫列)。
最基本的语法长这样:
ALTER TABLE 表名字 ADD COLUMN 新字段名字 字段类型;
举个例子,你有个表叫 user,现在想给它加一个 age 字段,用来存年龄,年龄是整数,那么你就可以在MySQL的管理工具(比如命令行或者Navicat那种图形化工具)里这么写:
ALTER TABLE user ADD COLUMN age INT;
执行一下,这个字段就加上了,以后新存入的用户数据就可以填年龄了。
但光这样可能还不够,你可能会有些额外要求:
-
想指定字段放在哪儿:默认情况下,新字段会加在表的最后面,但你可能想把它放在用户名后面,看得更顺眼,你可以用
AFTER关键字。ALTER TABLE user ADD COLUMN age INT AFTER username;这句话的意思就是,新加的age字段,放在已有的username字段后面。 -
想设置默认值:比如大部分用户都是20岁,你可以给年龄设个默认值20,这样如果不填,数据库自动就给它填上20。
ALTER TABLE user ADD COLUMN age INT DEFAULT 20;这个DEFAULT 20就是设置默认值。 -
不允许为空:如果你要求每个用户必须填年龄,不能是空的,那就加上
NOT NULL。ALTER TABLE user ADD COLUMN age INT NOT NULL DEFAULT 20;这句话合起来就是:加一个年龄字段,是整数,不允许为空,如果插入数据时没提供值,就默认给20。
再讲讲怎么改已有的字段
改字段稍微复杂点,因为可能涉及改名字、改类型、改约束等等,用的还是 ALTER TABLE 语句,但后面跟的是 CHANGE COLUMN 或者 MODIFY COLUMN。

这里有个区别(根据MySQL官方手册的说法):
CHANGE COLUMN:如果你想改字段的名字,或者同时改名字和类型/约束,用这个,它比较全能,但需要你把旧名字和新名字都写上。MODIFY COLUMN:如果你不想改字段名,只想改它的类型或者约束(比如把字符串改长点、允许空改成不允许空),用这个更简洁。
举几个例子就明白了:
-
修改字段类型(不改名) 比如你当初把电话号码字段
phone设成了VARCHAR(20),现在发现不够用,想扩大到30位。ALTER TABLE user MODIFY COLUMN phone VARCHAR(30);很简单,直接用MODIFY COLUMN指定字段名和新的类型就好了。 -
修改字段名(或者同时改名改类型) 比如你觉得
phone这个名字不好,想改成telephone,类型保持不变。ALTER TABLE user CHANGE COLUMN phone telephone VARCHAR(30);注意,即使你不想改变类型,也需要把原来的类型VARCHAR(30)再写一遍,不然会报错。CHANGE要求你完整地定义新字段。如果你想同时把名字从
phone改成mobile_phone,并且把类型从VARCHAR(30)改成CHAR(11),也是一条语句搞定:ALTER TABLE user CHANGE COLUMN phone mobile_phone CHAR(11); -
修改字段的默认值 比如你给年龄设置的默认值20不合适了,想改成18。 设置默认值:
ALTER TABLE user ALTER COLUMN age SET DEFAULT 18;删除默认值(让字段没有默认值):ALTER TABLE user ALTER COLUMN age DROP DEFAULT;
-
修改字段是否允许为空 比如你一开始允许电话号码为空,现在业务要求必须填,就要把它改成
NOT NULL。ALTER TABLE user MODIFY COLUMN telephone VARCHAR(30) NOT NULL;注意,如果这个字段里已经有NULL空值了,你直接这么改会失败,你得先把这些空值都更新成某个值(比如空字符串),才能执行这个操作。
重要提醒和注意事项
这些操作听起来简单,但对线上正在使用的数据库做的时候,一定要非常小心。
-
备份第一:在执行任何
ALTER TABLE操作之前,只要条件允许,一定要先把整个数据库或者那张表备份一下,万一操作失误或者出了什么岔子,还能恢复回来,这是血泪教训,根据DBA(数据库管理员)们的普遍经验,这是铁律。 -
锁表问题:直接使用上面这些语句,尤其是表很大或者服务器比较忙的时候,MySQL可能会锁住整个表(根据MySQL的官方文档,某些操作会导致表锁),导致这段时间内其他读写这个表的请求都要等着,网站或应用可能就会卡顿甚至报错,对于大表,这不是个小问题。
-
大数据量的处理:如果你的表已经有几百万甚至上千万条数据了,加个字段或改个字段类型(比如把整数改成字符串)可能会非常慢,因为MySQL需要为每一行数据执行这个变更操作,可能会需要几分钟甚至几小时,这段时间数据库压力会很大。
对于这种大表,有一些更高级的技巧来减少影响,比如先在一台备用的数据库上操作,然后再切换过来(这属于数据库运维的高级话题了),但作为一般了解,你需要知道有性能影响这回事。
核心就是记住 ALTER TABLE 这个命令,加字段用 ADD,改字段用 CHANGE(要改名时)或 MODIFY(不改名时),操作前务必备份,对重要的大表操作要谨慎选择时间(比如半夜访问量小的时候)。
本文由歧云亭于2025-12-27发表在笙亿网络策划,如有疑问,请联系我们。
本文链接:http://waw.haoid.cn/wenda/69160.html
