MySQL表的操作_知识文档

MySQL 表操作知识文档

一、学习目标

掌握 MySQL 中表的完整生命周期操作:

  • 查看数据库中的表
  • 创建普通表和临时表
  • 查看表结构
  • 添加、修改、重命名和删除字段
  • 重命名表
  • 删除一个或多个表
  • 理解 InnoDB 与 MyISAM 表在磁盘上的文件形式

二、核心命令速查

操作 SQL
查看当前数据库中的所有表 SHOW TABLES;
创建表 CREATE TABLE 表名 (...);
表不存在时才创建 CREATE TABLE IF NOT EXISTS 表名 (...);
创建临时表 CREATE TEMPORARY TABLE 表名 (...);
查看表结构 DESC 表名;
添加字段 ALTER TABLE 表名 ADD 字段定义;
修改字段定义 ALTER TABLE 表名 MODIFY 字段定义;
重命名字段 ALTER TABLE 表名 RENAME COLUMN 旧字段 TO 新字段;
删除字段 ALTER TABLE 表名 DROP COLUMN 字段名;
重命名表 ALTER TABLE 旧表名 RENAME TO 新表名;
删除表 DROP TABLE 表名;
表存在时才删除 DROP TABLE IF EXISTS 表名;

三、查看所有表

sql 复制代码
SHOW TABLES;

该命令只显示当前已选数据库中的表。若尚未选择数据库,应先执行:

sql 复制代码
USE 数据库名;

四、创建表

4.1 基本语法

sql 复制代码
CREATE [TEMPORARY] TABLE [IF NOT EXISTS] 表名 (
    字段名 数据类型 [约束] [COMMENT '字段说明'],
    字段名 数据类型 [约束] [COMMENT '字段说明']
)
[ENGINE = 存储引擎]
[DEFAULT CHARACTER SET = 字符集]
[COLLATE = 排序规则];

4.2 关键选项

选项 作用
TEMPORARY 创建临时表,通常仅在当前会话中有效
IF NOT EXISTS 表已存在时不报错,通常会产生警告
COMMENT 为字段添加说明
ENGINE 指定存储引擎
CHARACTER SET 指定字符集
COLLATE 指定排序规则

4.3 创建用户表

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;

字段设计说明:

  • BIGINT:适合保存范围较大的整数编号。
  • VARCHAR(20):保存长度可变的用户名。
  • CHAR(32):适合保存固定长度为 32 的字符串。
  • DATE:只保存年月日,不保存具体时间。

4.4 指定 MyISAM 存储引擎

sql 复制代码
CREATE TABLE t_myisam (
    id BIGINT,
    name VARCHAR(20) COMMENT '用户名'
)
ENGINE = MyISAM;

4.5 防止重复创建

sql 复制代码
CREATE TABLE IF NOT EXISTS users (
    id INT,
    name VARCHAR(20)
);

查看产生的警告:

sql 复制代码
SHOW WARNINGS;

五、存储引擎与磁盘文件

5.1 InnoDB

创建 InnoDB 表后,通常会生成:

text 复制代码
表名.ibd

.ibd 文件用于保存该表的数据和索引信息。

5.2 MyISAM

MyISAM 表通常对应多个文件:

文件 作用
表名.MYD 数据文件
表名.MYI 索引文件
表名.sdi 表结构描述文件,通常为 JSON 格式

MySQL 8.0 以前,表结构信息常保存在 .frm 文件中。


六、查看表结构

sql 复制代码
DESC users;

DESC 输出字段说明:

列 含义
Field 字段名
Type 字段的数据类型和长度
Null 是否允许保存 NULL
Key 索引类型
Default 默认值
Extra 自动增长等扩展信息

也可以写成:

sql 复制代码
DESCRIBE users;

七、修改表结构

7.1 基本语法

sql 复制代码
ALTER TABLE 表名 修改选项;

常用修改选项:

sql 复制代码
ADD [COLUMN] 字段名 字段定义 [FIRST | AFTER 已有字段名]

MODIFY [COLUMN] 字段名 新字段定义 [FIRST | AFTER 已有字段名]

DROP [COLUMN] 字段名

RENAME COLUMN 旧字段名 TO 新字段名

RENAME TO 新表名

7.2 添加字段

在 birthday 字段后添加头像地址:

sql 复制代码
ALTER TABLE users
ADD COLUMN assets VARCHAR(100) COMMENT '头像地址'
AFTER birthday;

字段位置控制:

sql 复制代码
-- 添加到第一列
ALTER TABLE users
ADD COLUMN code VARCHAR(20) FIRST;

-- 添加到指定字段之后
ALTER TABLE users
ADD COLUMN assets VARCHAR(100) AFTER birthday;

不写 FIRST 或 AFTER 时,新字段默认添加到表的末尾。


7.3 修改字段类型或长度

将 assets 的最大长度由 100 改为 255:

sql 复制代码
ALTER TABLE users
MODIFY COLUMN assets VARCHAR(255);

使用 MODIFY 时应完整写出新的字段定义。原有的注释、默认值或约束不会自动补充,遗漏后可能发生改变。

例如保留字段注释:

sql 复制代码
ALTER TABLE users
MODIFY COLUMN assets VARCHAR(255) COMMENT '头像地址';

7.4 重命名字段

sql 复制代码
ALTER TABLE users
RENAME COLUMN assets TO avatar;

此操作只修改字段名,不主动修改其数据类型和已有数据。


7.5 删除字段

sql 复制代码
ALTER TABLE users
DROP COLUMN avatar;

也可以省略 COLUMN:

sql 复制代码
ALTER TABLE users
DROP avatar;

删除字段会同时删除该字段中的全部数据,执行前应确认数据是否仍有保留价值。


7.6 重命名表

方式一:

sql 复制代码
ALTER TABLE users
RENAME TO employee;

方式二:

sql 复制代码
RENAME TABLE users TO employee;

重命名后,表结构和表中数据仍然保留,但原表名不再可用。


八、删除表

8.1 基本语法

sql 复制代码
DROP [TEMPORARY] TABLE [IF EXISTS]
表名 [, 表名 ...];

8.2 删除单个表

sql 复制代码
DROP TABLE employee;

8.3 删除多个表

sql 复制代码
DROP TABLE employee, t_myisam;

8.4 安全删除

sql 复制代码
DROP TABLE IF EXISTS employee;

IF EXISTS 可以避免目标表不存在时直接报错。

8.5 注意事项

  • 删除表会删除表结构和表中的全部数据。
  • 表对应的磁盘数据文件也会被删除。
  • DROP TABLE 属于高风险操作,执行前应核对数据库名和表名。
  • 重要数据应先备份。
  • 不要把"删除字段"和"删除表"混淆:
    • ALTER TABLE ... DROP COLUMN ... 删除字段。
    • DROP TABLE ... 删除整张表。

九、常见易错点

9.1 忘记选择数据库

sql 复制代码
USE 数据库名;

否则可能在错误的数据库中创建或删除表。

9.2 字符串长度设计不合理

sql 复制代码
name VARCHAR(20)

括号中的数字表示最大字符长度。长度过小会造成数据无法完整保存,长度过大则可能增加设计和索引成本。

9.3 CHAR 与 VARCHAR 使用混淆

  • CHAR(n):固定长度,适合长度稳定的数据。
  • VARCHAR(n):可变长度,适合长度不固定的数据。

例如:

sql 复制代码
password CHAR(32);
name VARCHAR(20);

9.4 修改字段时遗漏原属性

下面的语句可能使原有注释、默认值或约束发生变化:

sql 复制代码
ALTER TABLE users
MODIFY assets VARCHAR(255);

更稳妥的方式是写出完整字段定义:

sql 复制代码
ALTER TABLE users
MODIFY assets VARCHAR(255)
COMMENT '头像地址';

9.5 误用删除命令

sql 复制代码
ALTER TABLE users DROP COLUMN avatar;  -- 删除一个字段
DROP TABLE users;                      -- 删除整张表

执行删除类语句前,应先运行:

sql 复制代码
SHOW TABLES;
DESC 表名;

确认目标对象。


十、练习:商店数据库

10.1 创建并选择数据库

sql 复制代码
CREATE DATABASE IF NOT EXISTS store
DEFAULT CHARACTER SET utf8mb4
COLLATE utf8mb4_0900_ai_ci;

USE store;

10.2 创建商品表

sql 复制代码
CREATE TABLE IF NOT EXISTS 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
DEFAULT CHARACTER SET = utf8mb4
COLLATE = utf8mb4_0900_ai_ci;

10.3 创建客户表

sql 复制代码
CREATE TABLE IF NOT EXISTS 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
DEFAULT CHARACTER SET = utf8mb4
COLLATE = utf8mb4_0900_ai_ci;

10.4 创建购买记录表

sql 复制代码
CREATE TABLE IF NOT EXISTS 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
DEFAULT CHARACTER SET = utf8mb4
COLLATE = utf8mb4_0900_ai_ci;

10.5 检查创建结果

sql 复制代码
SHOW TABLES;

DESC goods;
DESC customer;
DESC purchase;

十一、操作流程模板

创建表后的检查流程

sql 复制代码
CREATE TABLE IF NOT EXISTS 表名 (
    字段定义
);

SHOW TABLES;
DESC 表名;
SHOW WARNINGS;

修改表后的检查流程

sql 复制代码
ALTER TABLE 表名 修改选项;

DESC 表名;

删除表前的确认流程

sql 复制代码
SHOW TABLES;
DESC 表名;

DROP TABLE IF EXISTS 表名;

SHOW TABLES;

十二、重点记忆

text 复制代码
查看表:SHOW TABLES
创建表:CREATE TABLE
查看结构:DESC
修改表:ALTER TABLE
删除表:DROP TABLE
text 复制代码
ADD           添加字段
MODIFY        修改字段定义
RENAME COLUMN 重命名字段
DROP COLUMN   删除字段
RENAME TO     重命名表

删除操作不可只看 SQL 是否能执行,还必须确认目标数据库、目标表和目标字段是否正确。

相关推荐
小白男神3 天前
MySQL进阶学习四(存储过程、游标、触发器)
mysql
这个DBA有点耶3 天前
MVCC深入:Read View、版本链与快照读——InnoDB并发控制的内核
数据库·mysql·架构
DBA_G3 天前
从地面到云霄:GBase数据库在民航三大场景的落地实践
数据库
自由能燃气设备3 天前
商用全预混低氮冷凝锅炉免费方案vs付费方案对比+选型避坑指南
大数据·数据库·人工智能
科创致远3 天前
科创致远 ESOP 系统核心效能与实战价值展示
大数据·数据库·人工智能·精益工程
kybs19913 天前
全球灾害数据分析可视化 毕业设计-附源码66794
vue.js·spring boot·mysql·安全·django·c#·asp.net
2601_962218613 天前
万象生鲜系统称重自动多退少补算法解决生鲜非标品痛点
大数据·数据库·人工智能·python·算法
程序猿_极客3 天前
【免费】分享一套优质的基于SSM的校园失物招领系统的设计与实现,源码+文档+视频详解(讲解)
java·mysql·ssm·课程设计·失物招领系统
张洛闻Eren3 天前
k8s云原生【第十课】:水平 Pod 自动扩缩容
运维·数据库·云原生·kubernetes·github
于平安3 天前
MySQL-触发器
数据库·mysql