3.表的操作【由浅入深-MySQL】

发布时间:2026/8/26 19:06:42

3.表的操作【由浅入深-MySQL】
文章目录表的创建与基础查看1.1 建表语句CREATE TABLE的完整形态1.1.1 列定义与注释1.1.2 表选项字符集、校验规则与存储引擎1.1.3 IF NOT EXISTS 的作用1.2 查看表结构DESC 命令1.3 SHOW CREATE TABLE被优化过的真实定义1.3.1 优化表现一语法标准化1.3.2 优化表现二默认值的显式补充1.3.3 优化表现三注释与索引的规范化1.3.4 实际输出示例模拟1.4 修改表ALTER TABLE 的完整变迁操作1.4.1 表的重命名RENAME1.4.2 新增列ADD COLUMN历史数据的填充逻辑1.4.3 修改列定义MODIFY / CHANGE覆盖式更新的深度陷阱1.4.4 删除列DROP COLUMN不可逆操作的风险警示1.5 删除表DROP TABLE 的彻底清理表的创建与基础查看在 MySQL 中表是数据存储的核心容器。本章将从最基础的建表语句出发逐步讲解如何查看表结构并深入剖析SHOW CREATE TABLE的输出特性。掌握这些内容是后续所有数据操作的前提。1.1 建表语句CREATE TABLE的完整形态一个标准的建表语句不仅需要定义列名和数据类型还应考虑字符集、校验规则、存储引擎等物理属性。语法CREATETABLEtable_name(field1 datatype,field2 datatype,field3 datatype)characterset字符集collate校验规则engine存储引擎;下面以两个实际例子展开CREATETABLEIFNOTEXISTSuser1(idINT,nameVARCHAR(20)COMMENT用户名,passwordCHAR(32)COMMENT用户的密码,birthdayDATECOMMENT用户的生日)CHARACTERSETutf8COLLATEutf8_general_ciENGINEMyISAM;CREATETABLEIFNOTEXISTSuser2(idINT,nameVARCHAR(20)COMMENT用户名,passwordCHAR(32)COMMENT用户的密码,birthdayDATECOMMENT用户的生日)CHARSETutf8COLLATEutf8_general_ciENGINEInnoDB;不同的存储引擎创建表的文件不一样。users 表存储引擎是 MyISAM 在数据目中有三个不同的文件分别是users.frm表结构users.MYD表数据users.MYI表索引1.1.1 列定义与注释每个列定义由列名 数据类型构成可选COMMENT用于添加描述性注释。注释应简明扼要例如用户名直接说明字段含义便于后期维护和文档生成。COMMENT 是数据库对象的说明信息保存在 MySQL 元数据中主要用于 SHOW CREATE TABLE、SHOW FULL COLUMNS 和数据库管理工具查看查询数据时不会显示也不会影响 SQL 执行。INT整型默认长度为 11显示宽度存储范围为 -2147483648 ~ 2147483647。VARCHAR(20)可变长字符串最大长度为 20 个字符注意MySQL 中VARCHAR长度指字符数而非字节数实际占用空间取决于字符集。CHAR(32)定长字符串总是占用 32 个字符的存储空间不足时补空格适合存储固定长度的数据如 MD5 加密后的密码。DATE日期类型格式为YYYY-MM-DD范围从1000-01-01到9999-12-31。1.1.2 表选项字符集、校验规则与存储引擎表选项位于)之后用于定义表的全局属性。字符集CHARACTER SET / CHARSET指定表中字符列使用的编码。utf8是通用的 UTF-8 编码支持大部分语言字符。注意 MySQL 中的utf8实际为三字节编码utf8mb3若需完整 Emoji 等四字节字符应使用utf8mb4。校验规则COLLATE决定字符比较和排序的规则。utf8_general_ci是不区分大小写的通用校验规则ci即case insensitive。不同的校验规则会影响查询时的ORDER BY和WHERE条件中的字符串比较结果。存储引擎ENGINE指定表的物理存储机制。示例中分别使用了MyISAM和InnoDB。MyISAM早期默认引擎不支持事务和外键但查询速度快适合读多写少的场景。InnoDB当前 MySQL 默认引擎支持事务、行级锁、外键约束具备崩溃恢复能力是绝大多数生产环境的首选。写法差异CHARACTER SET utf8与CHARSET utf8等价ENGINE MyISAM与ENGINE InnoDB等价。等号可有可无但推荐统一风格以增强可读性。1.1.3IF NOT EXISTS的作用该子句用于避免重复建表时报错。如果表已存在则语句不会执行创建操作也不会返回错误仅显示一个警告可通过SHOW WARNINGS查看。这在脚本化部署中非常实用。1.2 查看表结构DESC 命令建表完成后最常用的查看命令是DESC或DESCRIBE它返回表的列信息包括字段名、类型、是否允许 NULL、键类型、默认值和额外属性。DESC表名;Null列显示YES表示该列允许存储NULL值若不指定NOT NULL默认可为 NULL。Key列指示索引类型PRI主键、UNI唯一键、MUL非唯一索引。Default列显示默认值未显式指定时默认为NULL除非字段有NOT NULL且无默认值此时行为取决于严格模式。Extra列包含额外信息如auto_increment、on update CURRENT_TIMESTAMP等。DESC仅展示结构骨架不显示字符集、存储引擎等表级选项。若要获取更完整的元数据需使用SHOW CREATE TABLE。1.3 SHOW CREATE TABLE被优化过的真实定义SHOW CREATE TABLE是查看表完整定义的最佳工具它返回一条重建该表的CREATE TABLE语句。但在使用时需注意该语句返回的建表语句并非你原始书写的文本而是经过 MySQL 解析和优化后的标准化版本。SHOWCREATETABLEuser1\G使用\G替代分号可将结果以垂直列形式展示避免字段过长导致折行便于阅读。1.3.1 优化表现一语法标准化MySQL 会对关键字、选项写法进行统一。例如你原始写CHARACTER SET utf8 COLLATE utf8_general_ci ENGINE MyISAM返回的语句可能变为ENGINEMyISAM DEFAULT CHARSETutf8 COLLATEutf8_general_ci。MySQL 会调整顺序统一使用赋值并补充DEFAULT关键字但语义不变。1.3.2 优化表现二默认值的显式补充如果建表时未显式指定某些选项MySQL 会补上当前会话或全局的默认值。例如若未指定ROW_FORMAT返回的语句可能包含ROW_FORMATDYNAMICInnoDB 默认。字符集和校验规则若未指定也会继承数据库级别的设置并在SHOW CREATE TABLE中明确写出。1.3.3 优化表现三注释与索引的规范化列注释原样保留但会使用单引号包裹。若存在索引如PRIMARY KEYMySQL 会将其整合到CREATE TABLE中并统一使用USING BTREE等显式索引类型。表选项如AUTO_INCREMENT当前值也会被记录但该值可能随插入操作变化。1.3.4 实际输出示例模拟CREATE TABLE user1 ( id int(11) DEFAULT NULL, name varchar(20) DEFAULT NULL COMMENT 用户名, password char(32) DEFAULT NULL COMMENT 用户的密码, birthday date DEFAULT NULL COMMENT 用户的生日 ) ENGINEMyISAM DEFAULT CHARSETutf8 COLLATEutf8_general_ci观察发现所有列都被添加了DEFAULT NULL因为我们建表时未指定NOT NULLMySQL 显式补全了默认值。表名和列名被反引号包裹以兼容特殊关键字或保留字。存储引擎和字符集被调整为标准格式。重要提醒SHOW CREATE TABLE输出的语句是 MySQL 内部存储的真实定义当你需要迁移表或重建表时应优先使用该输出而非依赖原始手写脚本因为它反映了当前表的实际物理状态包括自动添加的选项和默认值。1.4 修改表ALTER TABLE 的完整变迁操作ALTER TABLE是 MySQL 中最强大的结构变更命令。它可以同时包含多个操作以逗号分隔但为了清晰演示我们通常分步执行。本节将从表重命名开始逐一深入到列级的增删改操作。1.4.1 表的重命名RENAME在业务初建时表名可能不够规范或需要将测试表转为正式表此时必须修改表名。MySQL 提供了两种完全等价的重命名语法。语法一标准 ALTER 方式ALTERTABLE旧表名RENAMETO新表名;语法二专用 RENAME 方式RENAMETABLE旧表名TO新表名;例如将前文中的user表更名为users这一操作将为后续修改列名的示例做好铺垫ALTERTABLEuserRENAMETOusers;-- 或 RENAME TABLE user TO users;操作要点与底层机制RENAME操作仅修改数据字典系统表中的表名映射不涉及物理数据文件的移动MyISAM 引擎会重命名.frm、.MYD、.MYI文件InnoDB 则仅更新表空间内的元数据因此执行速度极快几乎不阻塞并发查询在 5.7 及更高版本中大多数引擎支持原子性重命名。权限继承重命名后的表会保留原表的所有权限设置GRANT赋予的权限不受影响。跨数据库重命名RENAME TABLE db1.old_name TO db2.new_name;可以实现表在不同数据库间的移动但要求两个数据库位于同一文件系统且涉及 InnoDB 时需注意表空间文件位置。1.4.2 新增列ADD COLUMN历史数据的填充逻辑当产品需要增加新属性时ADD子句派上用场。以下是一段典型的字段新增操作ALTERTABLEuserADDimage_pathVARCHAR(128)COMMENT这个是用户的头像路径AFTERbirthday;执行后查询结果中两条历史记录的image_path均显示为NULL。语法全量解析ALTERTABLE表名ADD[COLUMN]列名 数据类型[约束][COMMENT注释][FIRST|AFTER已有列名];COLUMN关键字为可选写上可增强可读性。FIRST将新列添加为表的第一列。AFTER 列名将新列插入到指定列的后面。若不指定FIRST或AFTER新列默认追加到表的最后一列。核心知识点新增列时历史数据的处理机制重点这是一个极易被忽视的关键行为。当执行ADD COLUMN且未显式指定DEFAULT默认值时如果新列允许NULL值即未指定NOT NULLMySQL 会将所有已存在的行中该列的值填充为NULL。截图中的image_path全部为NULL正是此因。如果新列定义为NOT NULL且未指定默认值MySQL 的行为取决于sql_mode是否启用严格模式严格模式下STRICT_TRANS_TABLES会直接报错拒绝执行要求必须提供DEFAULT默认值。非严格模式下MySQL 会默认填充该数据类型的“隐式默认值”如数值型为0字符串为日期为0000-00-00并产生一个警告。高效操作建议在大表千万级数据中新增列时建议使用ALGORITHMINPLACEInnoDB 支持并加上DEFAULT值避免因NULL填充导致的重建表锁表时间过长。如果必须添加NOT NULL列应分步执行先添加允许NULL的列更新完业务数据后再执行MODIFY改为NOT NULL。1.4.3 修改列定义MODIFY / CHANGE覆盖式更新的深度陷阱修改列存在两种不同的命令语法分别应对“不改名只改类型/约束”和“改名同时改定义”的需求。场景一使用 MODIFY仅修改属性不改列名ALTERTABLEuserMODIFYnameVARCHAR(60);这条语句将name列的最大长度从 20 扩展到 60。完整语法ALTER TABLE 表名 MODIFY [COLUMN] 列名 数据类型 [约束] [FIRST | AFTER 列名];场景二使用 CHANGE修改列名同时可修改属性ALTERTABLEusers CHANGE name xingmingVARCHAR(60)DEFAULTNULL;这条语句将name列更名为xingming同时将数据类型改为VARCHAR(60)并显式设置了默认值为NULL。完整语法ALTER TABLE 表名 CHANGE [COLUMN] 旧列名 新列名 数据类型 [约束] [FIRST | AFTER 列名];⚠️ 极度重要的“覆盖”特性Caveat无论是MODIFY还是CHANGE它们在执行时都遵循完全覆盖的逻辑而非“增量修改”。这意味着你写在MODIFY/CHANGE子句中的内容将完整替换该列的现有定义。未在语句中明确写出的属性将丢失并被重置为默认值。举例说明假设原列定义为name VARCHAR(20) NOT NULL COMMENT 用户名。如果执行ALTER TABLE user MODIFY name VARCHAR(60);注意这里没写NOT NULL也没写COMMENT该列会变成VARCHAR(60) DEFAULT NULL原有的NOT NULL约束和COMMENT注释将彻底消失。这就是“覆盖”的含义。最佳实践在执行MODIFY或CHANGE之前务必先执行SHOW CREATE TABLE 表名\G获取完整的当前列定义包括注释、默认值、是否可为空然后在修改语句中原样保留所有不想变更的属性仅修改目标部分。例如保留注释和NOT NULL的正确写法为ALTERTABLEuserMODIFYnameVARCHAR(60)NOTNULLCOMMENT用户名;1.4.4 删除列DROP COLUMN不可逆操作的风险警示当业务下线某些功能时我们需要移除不再使用的字段。ALTERTABLEuserDROPpassword;语法ALTER TABLE 表名 DROP [COLUMN] 列名;执行机制与风险DROP COLUMN会从表的每一行中移除该列数据并在数据字典中删除该列定义。对于 InnoDB 引擎此操作会重建表除非使用ALGORITHMINSTANT且 MySQL 8.0 支持某些即时删除场景期间会占用额外的磁盘空间和锁表时间。此操作为永久性、不可逆操作。一旦执行该列的数据将物理删除除非在备份或 Binlog 中留有记录。在生产环境中执行前务必备份数据或在测试环境验证。如果一个表包含大量数据DROP COLUMN可能触发大量的 I/O 负载建议在业务低峰期执行。1.5 删除表DROP TABLE 的彻底清理当整个业务模块被废弃时我们需要删除整张表及其所有数据。这属于最高级别的清理操作。语法DROPTABLE[IFEXISTS]表名1[,表名2,...];执行细节与恢复机制该语句会删除表的全部数据行、表结构定义以及与该表相关的触发器、索引、权限等元数据。对于 InnoDB 引擎DROP TABLE会立即释放表空间文件.ibd占用的磁盘空间操作系统级别立即回收。数据恢复DROP TABLE操作无法通过ROLLBACK回滚因为 DDL 具有隐式提交特性。唯一的恢复手段是依赖之前的物理备份如mysqldump或从 Binlog 中重建数据。IF EXISTS 子句的防护价值与建表时的IF NOT EXISTS对称IF EXISTS可以避免因表不存在而抛出错误ERROR 1051 (42S02)。它仅产生一个警告非常适合运行在自动化脚本中保证脚本的健壮性。例如DROPTABLEIFEXISTStemp_log;级联风险如果存在外键约束引用了该表例如其他表通过FOREIGN KEY指向本表的主键DROP TABLE会失败并报错。此时需要先删除相关的外键约束或使用SET FOREIGN_KEY_CHECKS 0;临时禁用检查务必谨慎禁用可能导致数据完整性被破坏。补充具体的后续章节讲解表中插入数据insertintostudent(id,name,gender)values(1,张三,男);insertintostudent(id,name,gender)values(2,李四,女);insertintostudent(id,name,gender)values(3,王五,男);查询表中的数据select*fromstudent;

相关新闻

【译】Visual Studio 管理员?快来参与我们的私有市场预览版体验!

【译】Visual Studio 管理员?快来参与我们的私有市场预览版体验!

2026/8/26 19:06:42

Visual Studio 管理员?快来参与我们的私有市场预览版体验!各组织正日益寻求加强对开发环境内扩展程序的管控。受安全、合规以及内部治理要求的驱动,各团队希望更清晰地掌握开发者查找和获取扩展程序的具体情况。为满足这些需求,我…

小型阿里云oss!一款开源永久免费的轻量级对象存储系统,可存储各类文件

小型阿里云oss!一款开源永久免费的轻量级对象存储系统,可存储各类文件

2026/8/26 19:06:42

💂 个人网站: IT知识小屋🤟 版权: 本文由【IT学习日记】原创、在CSDN首发、需要转载请联系博主💬 如果文章对你有帮助、欢迎关注、点赞、收藏(一键三连)和订阅专栏哦 文章目录简介技术栈系统截图应用示例安装教程开源地址&使用手册写在最…

具身智能中TVA架构提升VLA决策效率新进展

具身智能中TVA架构提升VLA决策效率新进展

2026/8/26 19:06:42

前沿技术探索:TVA智能体(简称TVA)TVA智能体(亦称“AI智能体视觉”或“TVA视觉智能体”)是依托Transformer架构与“因式智能体”理论构建的系统级视觉技术框架。它融合深度强化学习(DRL)、卷积神…

Greenplum 日常维护命令

Greenplum 日常维护命令

2026/8/26 20:26:45

Greenplum 日常维护 1. 数据库启动:gpstart 常用可选参数: -a : 直接启动,不提示终端用户输入确认 -m:只启动master 实例,主要在故障处理时使用 2. 数据库停止:gpstop: 常用可选参数&#…

cumulus collator-selection Pallet 解析:Parachain 如何实现开放出块与提名集(完整指南)

cumulus collator-selection Pallet 解析:Parachain 如何实现开放出块与提名集(完整指南)

2026/8/26 20:26:45

cumulus collator-selection Pallet 解析:Parachain 如何实现开放出块与提名集(完整指南) 【免费下载链接】cumulus Write Parachains on Substrate 项目地址: https://gitcode.com/gh_mirrors/cum/cumulus cumulus 是 Polkadot 生态中…

过了查重却过不了AIGC检测?2026论文AI工具横评+分阶段组合,帮你省钱不踩坑

过了查重却过不了AIGC检测?2026论文AI工具横评+分阶段组合,帮你省钱不踩坑

2026/8/26 20:26:45

又到毕业季,身边学弟学妹的焦虑已经从"论文写不完"变成了"过了查重过不了AIGC检测"。现在高校普遍实行"双检"——既要查重复率,又要查AI生成率,不少同学用AI辅助写作后,对着满屏标红的AIGC报告欲哭…

【Linux】线程到底是什么?从轻量级进程、虚拟地址到页表与 MMU,一次理清线程底层模型

【Linux】线程到底是什么?从轻量级进程、虚拟地址到页表与 MMU,一次理清线程底层模型

2026/8/26 20:26:45

🔥个人主页:爱和冰阔乐 📚专栏传送门:《数据结构与算法》 、C 🐶学习方向:C方向学习爱好者 ⭐人生格言:得知坦然 ,失之淡然 🏠博主简介 文章目录前言一、线程到底是什么…

天猫上架软件:活动名额毫秒级抢占,提交速度比人工快200倍

天猫上架软件:活动名额毫秒级抢占,提交速度比人工快200倍

2026/8/26 20:26:45

天猫上架软件:活动名额毫秒级抢占,提交速度比人工快200倍 跑店群的兄弟都清楚,天猫的自动化上架,是店群运营中最耗人力也最容易出错的环节。 手动上架一个商品从填写标题、上传主图、设置SKU、填写详情到发布,熟练操…

开源对决闭源:Raon-OpenTTS-1B与Qwen3-TTS、CosyVoice 3、F5-TTS正面硬刚

开源对决闭源:Raon-OpenTTS-1B与Qwen3-TTS、CosyVoice 3、F5-TTS正面硬刚

2026/8/26 20:16:44

开源对决闭源:Raon-OpenTTS-1B与Qwen3-TTS、CosyVoice 3、F5-TTS正面硬刚 【免费下载链接】Raon-OpenTTS-1B 项目地址: https://ai.gitcode.com/hf_mirrors/KRAFTON/Raon-OpenTTS-1B Raon-OpenTTS-1B 是 KRAFTON 推出的开源 TTS(文本转语音&…

[光学原理与应用-521]:对光的错误理解与纠偏

[光学原理与应用-521]:对光的错误理解与纠偏

2026/8/26 1:50:39

首先光是一种能量的载体和形态,宏观上观察到的光是由无数个微观的光量子组成的,每个光子在产生的瞬间,其在真空的空间中以确定不变的速度沿着一个初始的方向一直向前,在微观层面,每个光量子的运动轨迹是以波函数所展现…

SIP通话转接原理与REFER方法实战解析

SIP通话转接原理与REFER方法实战解析

2026/8/26 1:49:16

1. 通话转接不是“挂断再拨号”,而是SIP会话的动态重定向你有没有遇到过这样的场景:客服坐席A正在和客户通电话,突然需要把这通对话无缝转给专家坐席B,客户完全感知不到中间的断连——既没听到忙音,也没被要求重新拨号…

Kolla-ansible单节点OpenStack部署实战:从环境准备到排坑指南

Kolla-ansible单节点OpenStack部署实战:从环境准备到排坑指南

2026/8/26 17:50:58

1. 为什么选择Kolla-ansible来部署单节点OpenStack?如果你正在寻找一种能把OpenStack从“概念”快速变成“可用的实验环境”的方法,那么Kolla-ansible几乎是当前最主流、最省心的选择。我见过太多人卡在手动编译依赖、配置服务、处理版本冲突的泥潭里&am…

Python random 模块常用函数详解:从入门到实战

Python random 模块常用函数详解:从入门到实战

2026/8/26 0:05:45

目录 1. 引言2. 准备工作3. 基础随机函数4. 序列相关函数5. 随机种子与复现6. 实战案例7. 注意事项8. 常见问题与排查9. 总结 1. 引言 摘要: 本文系统介绍 Python 标准库 random 模块中最常用的随机数生成函数。内容涵盖基础随机函数(random()、unifor…

Hermes接入团队协作后,我推翻了三个效率假设

Hermes接入团队协作后,我推翻了三个效率假设

2026/8/26 0:05:45

聊《Hermes真能提效吗?先看流程里最慢的那一步》之前,先说一句实在的:别急着背概念,先看它在真实项目里到底解决什么问题。摘要团队把 Hermes 接进项目三个月后,交付速度没有提升反而慢了。复盘后发现,最先…

免费AI大模型调教指南:打造专属网文写作助手

免费AI大模型调教指南:打造专属网文写作助手

2026/8/26 0:05:45

1. 先搞清楚“AI小说扩展模式”到底能帮你做什么如果你是一个刚开始写网文、或者卡在L3级别以下的作者,最头疼的可能是情节推进不下去、人物对话干瘪,或者世界观设定不够丰满。自己对着空白文档硬憋,效率很低。这时候,一个能理解你…

摆脱论文困扰!盘点2026年全网爆红的的AI论文写作工具

摆脱论文困扰!盘点2026年全网爆红的的AI论文写作工具

2026/8/22 2:02:26

一天写完毕业论文在2026年已不再是天方夜谭。2026年最炸裂、实测能大幅提速的AI论文写作工具,覆盖选题构思、文献整理、内容生成、格式排版等核心场景,真正帮你高效搞定论文难题。 一、全流程王者:一站式搞定论文全链路(一天定稿首…

导师推荐!2026最新AI论文工具测评与实用推荐

导师推荐!2026最新AI论文工具测评与实用推荐

2026/8/26 18:07:30

2026年真正好用的AI论文工具,核心看生成的论文质量、低AI味、格式正确、学术适配四大指标。综合实测,千笔AI、ThouPen、豆包、DeepSeek、Grammarly 是当前最值得推荐的梯队,覆盖从免费到付费、从中文到英文、从文科到理工的全场景需求。 一、…

告别游戏崩溃:XCOM 2模组管理器的智能革命

告别游戏崩溃:XCOM 2模组管理器的智能革命

2026/8/26 17:57:52

告别游戏崩溃:XCOM 2模组管理器的智能革命 【免费下载链接】xcom2-launcher The Alternative Mod Launcher (AML) is a replacement for the default game launchers from XCOM 2 and XCOM Chimera Squad. 项目地址: https://gitcode.com/gh_mirrors/xc/xcom2-lau…