【MySQL】数据库表的操作

【MySQL】数据库表的操作

MySQL数据库表的操作

MySQL表的操作

github地址

有梦想的电信狗

0. 前言

在学习 MySQL 的过程中,“表”是数据库操作的核心对象
无论是存储用户信息、记录日志、还是管理订单数据,一切都离不开表的创建、查看、修改与删除。
很多初学者在接触 SQL 时,只知道 CREATE TABLE 的基本语法,却容易忽略存储引擎、字符集、表结构调整等细节。
本文将以通俗易懂的方式,系统讲解 MySQL 表的常用操作命令与注意事项
通过实例演示和图示说明,让你不仅会“用”,还真正理解“为什么这样用”。

目标:让你在学完本篇后,能独立完成表的定义、调整与安全删除操作,
并对存储引擎、结构变化等底层机制有更清晰的认识。

1. 创建表

语法

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

说明

  • field:表示列名
  • datatype:表示列的类型
  • character set字符集,如果没有指定字符集,则以所在数据库的字符集为准
  • collate校验规则,如果没有指定校验规则,则以所在数据库的校验规则为准

创建表示例

createdatabase users;# 创建表首先需要 创建并使用数据库use users;

以下两种写法均可

# 创建表 以下两种写法均可createtable user1 ( id int, name varchar(20)comment'用户名', password char(32)comment'密码是32位的md5值', birthday datecomment'生日')characterset utf8 engine MyISAM;createtableifnotexists user2 ( id int, name varchar(20)comment'用户名', password char(32)comment'密码是32位的md5值', birthday datecomment'生日')charset=utf8 collate=utf8_general_ci engine=InnoDB;
  • 建表后,相应数据库的文件夹中出现了不同个数的表结构,是因为两张表使用了不同的存储引擎
  • 不同的存储引擎,对于在磁盘中文件个数的要求的不同
在这里插入图片描述

说明

  • 不同的存储引擎,创建表的文件不一样
    • user1表存储引擎是MyISAM,在数据目录中有三个不同的文件,分别是:
      • users.frm:表结构
      • users.MYD:表数据
      • users.MYI:表索引
    • 其中在MySQL 5.7 中,MyISAM存储引擎的表在数据目录中有以上三个不同的文件,MySQL 8.0 之后数据目录中优化为了两个文件

2. 查看表与表结构

命令汇总一览

# 查看当前正在使用的数据库selectdatabase();# 查看数据库中存在的表showtables;# 查看 表的结构desc table_name # table_name 为表名 desc 为 describe 的前四个字母

查看已有表

语法

# 查看 当前数据库已有的表selectdatabase();showtables;
在这里插入图片描述

查看表的具体结构

语法

# 查看 表的具体结构desc table_name # table_name 为表名

使用示例

# 查看 表 user1 的具体结构desc user1 # user1 为表名# 查看 表 user2 的具体结构desc user2 # user2 为表名
在这里插入图片描述
在这里插入图片描述

查看表创建时的使用的命令

语法

showcreatetable table_name;# 查看表创建时的使用的命令showcreatetable table_name \G # 该写法获取到的结果更直观,该命令需要去掉分号

使用示例

showcreatetable user1;# 查看表创建时的使用的命令showcreatetable user1 \G # 该写法获取到的结果更直观,该命令需要去掉分号
在这里插入图片描述

3. 修改表

在项目实际开发中,经常需要修改某个表的结构,比如字段名字字段大小字段类型表的字符集类型表的存储引擎等等。我们还有添加字段,删除字段等等的需求。这时我们就需要修改表

修改表名

  • 修改表名
altertable oldName renameto newName;altertable oldName rename newName;# to 可以省略
在这里插入图片描述

修改表的属性

语法

# 新增列属性ALTERTABLE tablename ADD(column datatype [DEFAULT expr][,column datatype]...);# 修改列属性ALTERTABLE tablename MODIfy(column datatype [DEFAULT expr][,column datatype]...);# 删除列ALTERTABLE tablename DROP(column);

先给表中添加两条记录

insertintouservalues(1,'张三','12345','2025-5-20');insertintouservalues(2,'李四','54321','2025-6-18');
在这里插入图片描述

在表中添加列

语法

# 新增列属性ALTERTABLE tablename ADD(column datatype [DEFAULT expr][,column datatype]...);

示例

  • user表添加一个字段,用于保存图片路径
altertableuseradd image_path varchar(128)comment'用户的图片路径'after birthday;select*fromuser;
在这里插入图片描述

在表中修改列属性

语法

# 修改列属性ALTERTABLE tablename MODIfy(column datatype [DEFAULT expr][,column datatype]...);

使用示例

  • user表中的name列的类型改为最长为60的变长字符串varchar(60)
altertableusermodify name varchar(60);
在这里插入图片描述

在表中删除列

注意:删除字段一定要小心,删除字段及其对应的列数据都没了

语法

# 删除列ALTERTABLE tablename DROP(column);

使用示例

  • 将表中的 password 列删除
# 将表中的 password 列删除altertableuserdrop password;
在这里插入图片描述

修改表的列名

语法

 alter table name_table change 表的旧列名 表的新列名 列数据类型; # --新字段需要完整定义 

使用示例

showtables;# 显示可使用的表descuser;# 查看表的属性altertableuser change name NAME varchar(80);# 修改 name 为 NAME,并指定数据类型为 varchar(80)descuser;# 查看修改后的结果
在这里插入图片描述

4. 删除表

实际中不到万不得已,不建议对表执行删除操作

用法

语法

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

使用示例

droptable user2;
在这里插入图片描述

注意与危害

在 MySQL 中执行 DROP TABLE 删除表操作,看似简单,但其危害往往非常严重。以下是对其危害的简述和分析:


🧨 一、数据不可恢复

  • 删除表会直接删除所有数据,包括表结构、索引、约束等元信息。
  • DELETE FROM table 不同,DROP TABLE 不会留下可恢复的数据记录。
  • 即使有 rollback 或事务机制,也无法恢复,因为 DROP TABLEDDL(数据定义语句),会 隐式提交事务

⚙️ 二、表结构丢失

  • 执行后,表的定义信息在数据字典中被清除,无法再重新创建出完全一致的表。
  • 若无备份,连字段类型、索引、约束等设计信息都无法找回。

💣 三、可能导致依赖关系破坏

  • 如果被删除的表被其他表(或视图、存储过程、外键等)依赖:
    • 外键约束失效;
    • 视图或存储过程无法执行;
    • 应用程序可能出现严重错误或崩溃。

🕳 四、日志与恢复机制受限

  • 虽然二进制日志(binlog)会记录 DROP TABLE 操作,但恢复时只能回放到删除之前的某个时间点。
  • 若未开启 binlog 或未及时备份,彻底丢失

⚡ 五、误操作风险高

  • 在生产环境中,执行 DROP TABLE 常因疏忽造成不可逆的业务损失
  • 常见误操作:
    • 在错误的数据库上执行;
    • 执行 DROP DATABASE 导致所有表被删除;
    • 使用自动化脚本时未限定环境(如测试/生产混用)。

✅ 安全建议

  1. 先备份:执行前务必使用 mysqldump 或物理备份工具备份表数据与结构。
  2. 限制权限:禁止普通账号执行 DROP 操作。

使用回收站机制:将表改名代替直接删除:

RENAMETABLE users TO users_backup_20251017;

使用 IF EXISTS:防止误删不存在的表。

DROPTABLEIFEXISTS users;

总结一句话:

DROP TABLE 是 MySQL 中最具破坏性的命令之一,一旦执行,数据和表结构将同时消失且无法通过事务恢复,因此必须慎用、先备份、再确认。

5. 结语

本文围绕 MySQL 中表的创建、查看、修改与删除进行了系统讲解,
从语法到示例,再到潜在风险分析,帮助你全面掌握“表”这一数据库的核心概念。

希望通过这篇文章,你不仅能熟练执行相关 SQL 命令,
更能在项目开发中学会思考与防范——比如在修改或删除表前养成备份的习惯。

数据库是系统的基石,而表结构的设计与维护,则是构建这座大厦的地基。
打好基础,才能在后续的数据库优化、索引设计、事务操作中更加得心应手。

学完这一章,建议继续深入学习:表约束(主键、外键、唯一约束)索引与查询优化视图与存储过程

让我们在下一篇中继续探索更高阶的 MySQL 世界 🚀

以上就是本文的所有内容了,如果觉得文章对你有帮助,欢迎 点赞⭐收藏 支持!如有疑问或建议,请在评论区留言交流,我们一起进步

分享到此结束啦
一键三连,好运连连!
你的每一次互动,都是对作者最大的鼓励!征程尚未结束,让我们在广阔的世界里继续前行! 🚀

Read more

RabbitMQ用法的6种核心模式全面解析

RabbitMQ用法的6种核心模式全面解析

文章目录 * **一、RabbitMQ核心架构解析** * 1. AMQP协议模型 * 2. 消息流转原理 * **二、六大核心用法详解** * **1. 简单队列模式(Hello World)** * **2. 工作队列模式(Work Queues)** * **3. 发布/订阅模式(Pub/Sub)** * **4. 路由模式(Routing)** * **5. 主题模式(Topics)** * **6. RPC模式(远程调用)** * **三、高级特性实战** * **1. 消息持久化** * **2. 死信队列(DLX)** * **3. 延迟队列(插件实现)** * **四、集群与高可用方案** * 1. 镜像队列配置 * 2. 联邦跨机房部署 * **五、性能调优指南** * **六、

By Ne0inhk
KingbaseES数据库:ksql 命令行从建表到删表实战(含避坑指南)

KingbaseES数据库:ksql 命令行从建表到删表实战(含避坑指南)

KingbaseES数据库:ksql 命令行从建表到删表实战(含避坑指南) 本文围绕 KingbaseES 中 ksql 命令行操作表展开,涵盖表 “创建→查看→数据增删改查→结构修改→删除” 全生命周期。前置准备需连接数据库并切换目标模式,可选确认表空间;创建表要明确数据类型与约束,含基础单表、进阶复合主键表示例;查看表结构可通过 \dt、\d、\d + 命令分别获取表列表、基本结构、详细信息;数据操作聚焦 INSERT(单条 / 批量)、SELECT(全量 / 条件 / 排序)、UPDATE(必加 WHERE)、DELETE(必加 WHERE);结构修改含增列、改列、删列、加约束、改表名;还梳理了三类常见报错解决方案。全文搭配实操命令与验证方法,助力新手快速掌握表操作核心技巧。

By Ne0inhk

PostgreSQL:如何定期验证备份的有效性?(灾备演练)

更多内容请见: 《深入掌握PostgreSQL数据库》 - 专栏介绍和目录 文章目录 * 一、为什么必须验证备份? * 二、验证目标与分类 * 三、逻辑备份(pg_dump / pg_dumpall)验证 * 1. 基础验证:语法与结构 * 2. 完整恢复测试(推荐每月一次) * 3. 自动化脚本示例 * 四、物理备份(Base Backup + WAL 归档)验证 * 步骤 1:准备恢复环境 * 步骤 2:执行 PITR 恢复 * 步骤 3:数据一致性检查 * 五、自动化灾备演练框架 * 架构设计 * 关键组件 * 六、高级验证技术 * 1. WAL

By Ne0inhk

Flutter 组件 pair 适配鸿蒙 HarmonyOS 实战:结构化元组治理,构建轻量级双元数据模型与跨层传递架构

欢迎加入开源鸿蒙跨平台社区:https://openharmonycrossplatform.ZEEKLOG.net Flutter 组件 pair 适配鸿蒙 HarmonyOS 实战:结构化元组治理,构建轻量级双元数据模型与跨层传递架构 前言 在鸿蒙(OpenHarmony)生态迈向多维数据感知、涉及高频函数返回值传递、两元坐标互操作及复杂状态标识返回的背景下,如何以最轻量化的方式实现数据的“成对化”封装,已成为提升代码整洁度与系统运行效率的“工程润滑剂”。在鸿蒙设备这类强调 AOT 极致性能与低内存开销的环境下,如果应用为了简单的双元数据(如:经纬度、错误码+消息)而动态创建大量繁琐的单次使用类(POJO),由于由于对象头开销与 GC 压力,极易由于由于“类爆炸”导致内存碎片的堆积。 我们需要一种能够支持强类型泛型、具备不可变属性且无需显式类定义的元组治理方案。 pair 为 Flutter 开发者引入了源自 C++ 与 Java 标准库经典语义的“

By Ne0inhk