MySQL表的操作:创建、查看、修改、删除完整实战

MySQL表的操作:创建、查看、修改、删除完整实战

摘要:在MySQL开发中,表是存储数据最基础单元。本文梳理MySQL中表的全套操作,包含查看表、建表、查看表结构、修改表、删除表,附带可直接运行SQL案例与踩坑要点,适合入门学习复习。

前言

数据库用来存放数据,而表才是真正承载业务数据的载体。实际开发需求迭代经常需要新建表、新增字段、修改字段类型、删除无用字段,甚至废弃整张表。熟练掌握表DDL(数据定义语言)是MySQL基本功。

本文基于MySQL8.0,主要覆盖以下能力:

  1. 查看数据库中所有表
  2. 创建普通表、指定存储引擎、字符集、临时表
  3. 查看表结构
  4. 修改表:增加列、修改列、重命名列、删除列、修改表名
  5. 删除表以及风险提醒
  6. 综合练习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;可选MyISAM
  • character set:字符集,推荐使用utf8mb4,支持完整emoji
  • collate:排序规则,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;

不同存储引擎磁盘文件区别

  1. InnoDB(默认)
    只生成 表名.ibd 文件,保存表的数据+索引。
  2. 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:表不存在也不会抛出错误,只会警告;支持同时删除多张表,逗号分隔。

⚠️重要注意事项

  1. drop table属于高危DDL,生产环境执行前务必备份数据;
  2. 删除之后磁盘上对应的物理文件直接移除;
  3. 不要随便在线上执行删表操作。

六、综合实战练习

需求:创建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;校验三张表结构。

七、知识点总结

  1. show tables; 查询当前库所有表;desc 表名查看表结构;
  2. create table建表,尽量指定字符集utf8mb4,写好comment注释;
  3. alter table常用动作:add新增字段,modify改字段类型,rename column改字段名,drop column删除字段,rename to修改表名;
  4. drop table删除整张表,高危操作,生产环境一定要谨慎;
  5. InnoDB和MyISAM存储引擎底层磁盘文件有明显区别,MySQL8.0默认使用InnoDB。

拓展:本文只讲基础DDL,后续还可以给字段增加主键、非空、唯一等约束,进一步完善表设计。

相关推荐
奇特認5 小时前
mysql 集群技术 3.高可用之 MHA
数据库·mysql
Bioinfo Guy7 小时前
高分Panel复现系列|转录因子网络太乱?用模块框把重点圈出来
数据库·生物信息学·生信可视化
ltl9 小时前
Disaggregated DB 合集:Socrates、PolarDB、Taurus 的共同模式
数据库
我就是妖怪10 小时前
KMP全栈开发:从Android到AI Agent的技术演进与实践
android·人工智能
Blossom i11 小时前
大数据预处理与采集实验一:使用Python操作MySQL数据库
数据库·mysql
InfinitePlus11 小时前
Docker MySQL搭建一主一从
mysql·docker
心平气和量大福大11 小时前
android-实例-蒲公英-更新与安装-5-签名与生成APK
android·java·开发语言
雾时之林11 小时前
Linux--软件管理、源码包安装
linux·服务器·数据库
阿pin13 小时前
Android随笔-Serializable与Parcelable
android·serializable·parcelable