☰
MySQL 表的操作全解:创建、查看、修改、删除,一篇讲透
2026/9/27 21:44:21 网站建设 项目流程

上一篇讲了"库的操作",这一篇来系统掌握 MySQL **表(table)**的完整操作:创建表、查看表结构、修改表结构、删除表。特别是ALTER TABLE的各种用法,是日常开发改动表结构的高频操作,一定得记牢。


一、创建表

MySQL 使用CREATE TABLE语句创建表,语法如下:

CREATETABLEtable_name(field1 datatype,field2 datatype,field3 datatype)characterset字符集collate校验规则engine存储引擎;

语法说明:

  • field:表示列名;
  • datatype:表示列的类型(如int、varchar、date);
  • character set 字符集:如果不指定,则以所在数据库的字符集为准;
  • collate 校验规则:如果不指定,则以所在数据库的校验规则为准;
  • engine 存储引擎:决定表在磁盘上的存储方式(如MyISAM、InnoDB)。

二、创建表案例

createtableusers(idint,namevarchar(20)comment'用户名',passwordchar(32)comment'密码是32位的md5值',birthdaydatecomment'生日')charactersetutf8engineMyISAM;

💡comment用来给字段添加注释,方便后来者理解字段含义。

不同的存储引擎,建表生成的文件不一样

上面users表用的是MyISAM引擎,在数据目录下会生成三个文件:

文件含义
users.frm表结构
users.MYD表数据
users.MYI表索引

打开数据目录(例如C:\ProgramData\MySQL\MySQL Server 5.7\Data\test1)可以看到:

名称类型大小
db.optOption 文件1 KB
person.frmFRM 文件9 KB
person.ibdIBD 文件96 KB
users.frmFRM 文件9 KB
users.MYDMYD 文件0 KB
users.MYIMYI 文件1 KB

💡 备注:如果改成InnoDB引擎创建表,就不会有.MYD/.MYI,而是.frm(表结构)+.ibd(表数据和索引一起存)两个文件。这也是 InnoDB 和 MyISAM 的直观区别。


三、查看表结构

desc表名;

以users表为例:

mysql> desc users; +----------+-------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +----------+-------------+------+-----+---------+-------+ | id | int(11) | YES | | NULL | | | name | varchar(20) | YES | | NULL | | | password | char(32) | YES | | NULL | | | birthday | date | YES | | NULL | | +----------+-------------+------+-----+---------+-------+

各列含义:

列名含义
Field字段名字
Type字段类型
Null是否允许为空
Default默认值
Extra扩充信息(如自增)

四、修改表

实际开发中经常要调整表结构:改字段名、改字段大小、改类型、改字符集、改存储引擎,甚至增删字段。这时就需要ALTER TABLE。

4.1 ALTER TABLE 通用语法

-- 添加字段ALTERTABLEtablenameADD(columndatatype[DEFAULTexpr][,columndatatype]...);-- 修改字段(修改类型/大小)ALTERTABLEtablenameMODIFY(columndatatype[DEFAULTexpr][,columndatatype]...);-- 删除字段ALTERTABLEtablenameDROP(column);

4.2 实战案例

先给users表插入两条数据:

mysql>insertintousersvalues(1,'a','b','1982-01-04'),(2,'b','c','1984-01-04');
① 添加一个字段(保存图片路径)
altertableusersaddassetsvarchar(100)comment'图片路径'afterbirthday;

after birthday表示把新字段插在birthday之后。

查看结果——新增字段对原表已有数据没有影响:

mysql> desc users; +----------+--------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +----------+--------------+------+-----+---------+-------+ | id | int(11) | YES | | NULL | | | name | varchar(20) | YES | | NULL | | | password | char(32) | YES | | NULL | | | birthday | date | YES | | NULL | | | assets | varchar(100) | YES | | NULL | | +----------+--------------+------+-----+---------+-------+ mysql> select * from users; +----+------+----------+------------+-------+ | id | name | password | birthday | assets | +----+------+----------+------------+-------+ | 1 | a | b | 1982-01-04 | NULL | -- 原数据仍然存在 | 2 | b | c | 1984-01-04 | NULL | +----+------+----------+------------+-------+
② 修改 name 字段长度
altertableusersmodifynamevarchar(60);

结果name从varchar(20)变成varchar(60)。

③ 删除 password 字段
altertableusersdroppassword;

⚠️删除字段一定要小心!字段和它对应的列数据都会一起消失,无法恢复。

删除后结构:

+----------+--------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +----------+--------------+------+-----+---------+-------+ | id | int(11) | YES | | NULL | | | name | varchar(60) | YES | | NULL | | | birthday | date | YES | | NULL | | | assets | varchar(100) | YES | | NULL | | +----------+--------------+------+-----+---------+-------+
④ 修改表名
altertableusersrenametoemployee;

to可以省略,等价于alter table users rename employee;。

改名后数据不丢失:

mysql> select * from employee; +----+------+------------+-------+ | id | name | birthday | assets | +----+------+------------+-------+ | 1 | a | 1982-01-04 | NULL | | 2 | b | 1984-01-04 | NULL | +----+------+------------+-------+
⑤ 修改字段名
altertableemployee change name xingmingvarchar(60);

⚠️ 用change修改字段名时,新字段需要给出完整定义(类型必须带上,不能只写名字)。

结果:

+----------+--------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +----------+--------------+------+-----+---------+-------+ | id | int(11) | YES | | NULL | | | xingming | varchar(60) | YES | | NULL | | | birthday | date | YES | | NULL | | | assets | varchar(100) | YES | | NULL | | +----------+--------------+------+-----+---------+-------+

五、删除表

语法:

DROP[TEMPORARY]TABLE[IFEXISTS]tbl_name[,tbl_name]...;

示例:

droptablet1;

⚠️ 删除表是不可逆操作,表结构和数据都会一并删除。IF EXISTS加上可避免表不存在时报错;一次性可删除多张表,用逗号分隔。


六、总结

操作命令
创建表create table 表名(字段 类型 ...) engine=存储引擎;
查看表结构desc 表名;
添加字段alter table 表名 add 字段 类型 [after 某字段];
修改字段类型/大小alter table 表名 modify 字段 新类型;
修改字段名alter table 表名 change 旧名 新名 完整类型;
删除字段alter table 表名 drop 字段;
修改表名alter table 旧表名 rename to 新表名;
删除表drop table [if exists] 表名;

核心一句话:建表选好存储引擎(MyISAM 三文件 vs InnoDB 两文件),改表用ADD增、MODIFY改类型、CHANGE改名字、DROP删字段,删除类操作务必谨慎。


如果这篇对你有帮助,欢迎点赞收藏。本系列持续更新 MySQL 操作。有疑问欢迎评论区交流。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询