MySQL表的操作:创建、查看、修改、删除完整实战
摘要:在MySQL开发中,表是存储数据最基础单元。本文梳理MySQL中表的全套操作,包含查看表、建表、查看表结构、修改表、删除表,附带可直接运行SQL案例与踩坑要点,适合入门学习复习。
前言
数据库用来存放数据,而表才是真正承载业务数据的载体。实际开发需求迭代经常需要新建表、新增字段、修改字段类型、删除无用字段,甚至废弃整张表。熟练掌握表DDL(数据定义语言)是MySQL基本功。
本文基于MySQL8.0,主要覆盖以下能力:
- 查看数据库中所有表
- 创建普通表、指定存储引擎、字符集、临时表
- 查看表结构
- 修改表:增加列、修改列、重命名列、删除列、修改表名
- 删除表以及风险提醒
- 综合练习SQL案例
一、查看所有表
进入对应数据库之后,可以查看当前库下面全部数据表。
语法
sql
show tables;
执行后会列出该库下全部表的名字。
二、创建表 CREATE TABLE
基础语法
sql
CREATE [TEMPORARY] TABLE 表名 (
字段名 数据类型 [约束] [COMMENT '字段说明'],
字段名2 数据类型 [约束] [COMMENT '字段说明']
)[ENGINE=存储引擎] [CHARACTER SET=字符集] [COLLATE=排序规则];
关键字说明:
TEMPORARY:创建临时表,会话断开自动消失field:列/字段名称datatype:数据类型 bigint、varchar、date、decimal等comment:字段注释,写注释是良好开发习惯engine:存储引擎,MySQL8.0默认InnoDB;可选MyISAMcharacter set:字符集,推荐使用utf8mb4,支持完整emojicollate:排序规则,utf8mb4_0900_ai_ci是8.0推荐规则
💡小提示:可以加上
IF NOT EXISTS,避免表已经存在时报错,只会产生警告。
示例1:创建用户表,指定字符集
sql
create table users (
id bigint,
name varchar(20) comment '用户名',
password char(32) comment '密码是32位的md5值',
birthday date comment '生日'
) CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci;
示例2:指定存储引擎MyISAM
sql
create table t_myisam (
id bigint,
name varchar(20) comment '用户名'
) engine = MyISAM;
不同存储引擎磁盘文件区别
- InnoDB(默认)
只生成表名.ibd文件,保存表的数据+索引。 - MyISAM
会生成3个文件:
.MYD:数据文件.MYI:索引文件.sdi:表结构描述json文件(MySQL8.0,5.x版本是.frm)
三、查看表结构 desc
建完表,我们需要查看一张表的字段、类型、是否允许null、默认值等信息。
语法
sql
desc 表名;
执行 desc users; 输出字段解释:
| 字段 | 含义 |
|---|---|
| Field | 列名 |
| Type | 字段数据类型 |
| Null | 是否允许NULL值 |
| Key | 索引类型 |
| Default | 字段默认值 |
| Extra | 扩展属性(自增等) |
四、修改表 ALTER TABLE
业务迭代,经常需要调整表结构,使用alter table完成,支持新增、修改、重命名、删除字段,修改表名。
1. 添加列 ADD COLUMN
语法:
sql
alter table 表名 add [column] 字段名 类型 [comment '注释'] [after 某个字段];
示例:users表增加头像字段,放在birthday后面
sql
alter table users ADD assets varchar(100) comment '头像地址' after birthday;
2. 修改字段类型/长度 MODIFY COLUMN
⚠️注意:modify只改类型,不能修改字段名
sql
alter table users MODIFY assets varchar(255);
3. 重命名字段 RENAME COLUMN
sql
alter table users RENAME COLUMN assets TO avatar;
4. 删除字段 DROP COLUMN
⚠️高危操作,删除后该列所有数据丢失,生产谨慎执行!
sql
alter table users DROP avatar;
5. 修改表名
两种写法效果等价:
sql
-- 方式1 alter table
alter table users RENAME TO employee;
-- 方式2 rename table
rename table employee TO users;
五、删除表 DROP TABLE
彻底删除整张表,表结构+全部数据+磁盘文件一起删除,不可恢复!
语法:
sql
DROP [TEMPORARY] TABLE [IF EXISTS] 表名1,表名2;
示例:
sql
drop table if exists employee;
✨使用
IF EXISTS:表不存在也不会抛出错误,只会警告;支持同时删除多张表,逗号分隔。
⚠️重要注意事项
- drop table属于高危DDL,生产环境执行前务必备份数据;
- 删除之后磁盘上对应的物理文件直接移除;
- 不要随便在线上执行删表操作。
六、综合实战练习
需求:创建store数据库,包含商品goods、客户customer、购买记录purchase三张业务表。
sql
-- 创建数据库
create database if not exists store default character set utf8mb4;
use store;
-- 商品表 goods
create table goods(
id bigint comment '商品编号',
name varchar(50) comment '商品名',
unitprice decimal(12,2) comment '零售单价',
costprice decimal(12,2) comment '成本价',
category varchar(20) comment '商品类型',
provider varchar(50) comment '供应商'
)engine=InnoDB charset=utf8mb4;
-- 客户表 customer
create table customer(
id bigint comment '客户编号',
name varchar(20) comment '客户姓名',
gender bool comment '性别',
phone_num varchar(20) comment '电话号码',
email varchar(50) comment '电子邮件',
address varchar(255) comment '地址',
create_time datetime comment '注册时间'
)engine=InnoDB charset=utf8mb4;
-- 购买记录表 purchase
create table purchase(
order_id varchar(32) comment '订单编号',
customer_id bigint comment '客户编号',
goods_id bigint comment '商品编号',
nums int comment '购买商品数量',
amount decimal(12,2) comment '总金额',
create_time datetime comment '订单生成时间'
)engine=InnoDB charset=utf8mb4;
建完可以使用desc goods; desc customer; desc purchase;校验三张表结构。
七、知识点总结
show tables;查询当前库所有表;desc 表名查看表结构;create table建表,尽量指定字符集utf8mb4,写好comment注释;- alter table常用动作:add新增字段,modify改字段类型,rename column改字段名,drop column删除字段,rename to修改表名;
- drop table删除整张表,高危操作,生产环境一定要谨慎;
- InnoDB和MyISAM存储引擎底层磁盘文件有明显区别,MySQL8.0默认使用InnoDB。
拓展:本文只讲基础DDL,后续还可以给字段增加主键、非空、唯一等约束,进一步完善表设计。