前言
前面我们掌握了MySQL数据库(库级) 的所有操作,包括创建、修改、删除、备份还原等。而在实际开发中,我们真正存储、操作业务数据的核心是数据表。
数据表是数据库的核心载体,所有的业务数据、字段约束、数据格式都依赖数据表定义。本篇文章将从零讲解MySQL数据表的完整操作,包含建表语法、存储引擎文件差异、查看表结构、修改表结构、删除表等高频实操命令,全程搭配真实运行案例,覆盖开发99%的表结构操作场景。
一、数据表创建:标准语法与核心规则
1.1 完整建表语法
MySQL创建数据表支持自定义字段、数据类型、字符集、校验规则、存储引擎,语法结构如下:
sql
create table table_name (
field1 datatype,
field2 datatype,
field3 datatype
)
[character set 字符集]
[collate 校验规则]
[engine 存储引擎];
1.2 核心参数说明
-
field:数据表列名(字段名),自定义命名,贴合业务场景
-
datatype:字段数据类型(int、varchar、date、char等),约束字段存储的数据格式
-
CHARACTER SET :表字符集,未指定时,默认继承所在数据库的字符集
-
COLLATE :表校验规则,未指定时,默认继承所在数据库的校验规则
-
ENGINE:表存储引擎,决定数据存储方式、索引机制、事务特性
1.3 实战建表案例
创建一张用户数据表 users,指定字段、备注、utf8字符集、MyISAM存储引擎:
sql
create table users (
id int comment '用户ID',
name varchar(20) comment '用户名',
password char(32) comment '密码,32位md5加密值',
birthday date comment '用户生日'
)
character set utf8
engine MyISAM;
1.4 存储引擎对应文件差异(核心知识点)
不同存储引擎的数据表,在磁盘中生成的文件完全不同,这是区分MyISAM和InnoDB的基础特征:
MyISAM引擎表(以上方users表为例)
创建成功后,数据目录会生成三个独立文件:
-
users.frm:存储表结构信息(字段、类型、备注等) -
users.MYD:存储表真实数据 -
users.MYI:存储表索引数据
InnoDB引擎表
InnoDB是MySQL默认存储引擎,仅生成 .frm 表结构文件,数据和索引统一存储在系统共享文件中,不单独拆分文件,也是企业项目主流存储引擎。
二、查看数据表结构
开发中经常需要查看数据表的字段、类型、是否为空、默认值等结构信息,核心命令:
基础语法
sql
desc 表名;
实战查询
sql
desc users;
执行后可清晰查看所有字段的Field(字段名)、Type(数据类型)、Null(是否可为空)、Key(索引)、Default(默认值)、Extra(额外属性)。
三、数据表修改(开发最高频操作)
项目迭代过程中,经常需要调整表结构:新增字段、修改字段长度/类型、删除冗余字段、修改表名、修改字段名等。所有表结构修改均使用 ALTER TABLE 命令。
前置准备:插入测试数据
为了直观验证修改效果,先给users表插入两条测试数据:
sql
insert into users values
(1,'a','b','1982-01-04'),
(2,'b','c','1984-01-04');
3.1 新增字段
业务迭代新增属性时,需要给数据表添加新字段,可指定字段位置、备注、默认值。
语法
sql
alter table 表名 add 字段名 数据类型 [comment 备注] [位置];
实战案例
在users表生日字段后,新增图片路径字段 assets:
sql
alter table users add assets varchar(100) comment '图片路径' after birthday;
效果验证 :执行 DESC users 可看到新增字段,原有数据完全保留,新增字段默认值为NULL,新增字段不会影响原有表数据。
3.2 修改字段数据类型/长度
当字段长度不足以满足业务需求时,可通过 MODIFY 修改字段类型、长度、约束。
语法
sql
alter table 表名 modify 字段名 新数据类型;
实战案例
将name字段长度从20修改为60:
sql
alter table users modify name varchar(60);
效果验证:查表可发现name字段长度更新为60,原有数据完全保留,无数据丢失。
3.3 删除字段
针对业务废弃的冗余字段,可直接删除。
语法
sql
alter table 表名 drop 字段名;
实战案例
删除users表中的password字段:
sql
alter table users drop password;
高危注意事项:删除字段为不可逆操作,字段对应的所有历史数据会被全部清空,生产环境操作前务必备份数据!
3.4 修改数据表名称
语法
sql
alter table 旧表名 rename to 新表名;
实战案例
将users表重命名为employee:
sql
alter table users rename to employee;
修改表名不会影响表内任何数据和字段结构,仅修改表的名称。
3.5 修改字段名称(重命名字段)
若业务字段命名不规范,可通过CHANGE 命令修改字段名,必须重新定义字段完整数据类型。
语法
sql
alter table 表名 change 旧字段名 新字段名 完整数据类型;
实战案例
将employee表的name字段重命名为xingming,保留原有varchar(60)类型:
sql
alter table employee change name xingming varchar(60);
核心注意:CHANGE命令必须携带完整字段类型,缺一不可,否则会语法报错。
四、删除数据表
对于废弃、无用的数据表,可直接删除,删除后表结构、表数据、索引全部清空。
标准语法
sql
drop [temporary] table [if exists] 表名1, 表名2...;
参数说明
-
IF EXISTS:容错参数,表存在才删除,避免表不存在导致的报错
-
支持批量删除多张数据表,用逗号分隔表名
实战案例
sql
-- 删除单张表
drop table if exists t1;
-- 批量删除多张表
drop table if exists t2,t3;
高危提醒:drop table是不可逆操作,删除后表结构和所有数据无法恢复,生产环境严禁随意执行!
五、全文核心总结
-
建表时字符集、校验规则默认继承数据库配置,MyISAM引擎表生成3个磁盘文件,InnoDB仅生成表结构文件
-
新增字段:ADD命令,不影响原有数据,可自定义字段位置
-
修改字段属性:MODIFY命令,仅改类型、长度,不改字段名
-
修改字段名:CHANGE命令,必须重写完整字段类型
-
删除字段/表:均为高危不可逆操作,生产环境操作前必须备份
-
表重命名仅修改名称,不影响任何数据和结构,是安全操作