◆ 博主名称 小此方-CSDN博客大家好欢迎来到小此方的博客。⭐️Linux系列个人专栏 【主题曲】Mysql⭐️此方的GitHub github_此方⭐️Re系列专栏我们思考 (Rethink) · 我们重建 (Rebuild) · 我们记录 (Record)文章目录概要序論一、 MySQL 数据库的基本操作1.1 创建数据库1.1.1 创建数据库案例1.2 字符集与校验规则的查看1.3 校验规则对数据库的影响1.3.1 实验环境准备1.3.2 校验规则对查询与排序的影响对比1.4 操纵与维护数据库1.4.1 查看数据库与显示创建语句1.4.2 修改数据库1.4.3 数据库的删除1.5 数据库的备份与恢复1.5.1 数据库备份1.5.2 数据库恢复1.5.3 备份的进阶技巧与注意事项1.6 查看数据库的连接情况二、 MySQL 表的基本操作2.1 创建数据表2.1.1 创建表综合案例2.1.2 存储引擎与底层文件的关系2.1.3 查看表创建时的详细信息2.2 查看表结构2.3 修改数据表ALTER TABLE2.3.1 增加新字段ADD2.3.2 修改字段属性MODIFY2.3.3 删除字段DROP2.3.4 修改表名RENAME2.3.5 修改列名与完整重定义CHANGE2.4 删除数据表概要序論本文深入讲解 MySQL 中数据库与数据表的核心操作与底层原理。阐述数据库创建的语法要素对比utf8_general_ci与utf8_bin校验规则对查询和排序的底层影响详解数据库的修改、安全删除以及通过mysqldump进行级联备份与恢复的工程实践剖析数据表创建流程揭示MyISAM与InnoDB存储引擎在磁盘文件结构上的本质差异演示ALTER TABLE在增加、修改、删除字段及重命名表时的应用与旧数据保留特性。好的我们直接开始。一、 MySQL 数据库的基本操作1.1 创建数据库SQL和文件也是上下层的关系SQL 语句Linux 文件系统本质创建数据库create database db_name;本质就是再/var/lib/mysql创建一个目录删除数据库drop database db_name;删除目录在 MySQL 中创建数据库的基本语法如下CREATEDATABASE[IFNOTEXISTS]db_name[create_specification[,create_specification]...];create_specification:[DEFAULT]CHARACTERSETcharset_name[DEFAULT]COLLATEcollation_name语法要点说明大写字母表示 SQL 关键字。方括号[]表示该选项是可选项。CHARACTER SET用于指定数据库采用的字符集它决定了数据库控制和支持什么语言。例如设置成utf8就可以支持中文。COLLATE用于指定数据库字符集的校验规则或校对规则它会直接影响字符串的排序和对比表现。1.1.1 创建数据库案例为了更好地理解我们来看几个具体的创建案例基础创建createdatabasedb1;注意当我们创建数据库而没有显式指定字符集和校验规则时系统会使用默认值。在 MySQL 5.7 中默认字符集通常是utf8默认校验规则是utf8_general_ci。指定字符集创建createdatabasedb2charsetutf8;//或者create database db2 character set utf8;同时指定字符集与校对规则创建createdatabasedb3charsetutf8collateutf8_general_ci;1.2 字符集与校验规则的查看我们可以通过以下指令来查看系统当前的状态或支持的配置查看当前系统默认的数据库字符集以及校验规则showvariableslikecharacter_set_database;showvariableslikecollation_database;查看当前 MySQL 数据库支持的所有字符集showcharset;查看当前 MySQL 数据库支持的所有字符集校验规则showcollation;1.3 校验规则对数据库的影响校验规则的不同会直接影响数据库在查询和排序时的表现。我们通过两组案例不区分大小写与区分大小写进行对比1.3.1 实验环境准备首先分别创建不区分大小写和区分大小写的两个数据库并插入相同的数据-- 1. 创建不区分大小写的数据库 testicreatedatabasetesticollateutf8_general_ci;usetesti;createtableperson(namevarchar(20));insertintopersonvalues(a),(A),(b),(B);-- 2. 创建区分大小写的数据库 test2createdatabasetest2collateutf8_bin;usetest2;createtableperson(namevarchar(20));insertintopersonvalues(a),(A),(b),(B);1.3.2 校验规则对查询与排序的影响对比校验规则类型查询where namea的结果排序order by name的结果utf8_general_ci(不区分大小写)会同时查询出a和A两条记录。排序时大小写字母交织在一起不作严格区分如a - A - b - B。utf8_bin(区分大小写)只能精确查询出a这条记录。依据 ASCII 码值进行严格排序大写字母排在小写字母前面如A - B - a - b。1.4 操纵与维护数据库1.4.1 查看数据库与显示创建语句查看当前服务中的所有数据库showdatabases;显示特定数据库的创建语句showcreatedatabase数据库名;说明MySQL 建议开发人员将关键字使用大写但这并不是强制性的。自动生成的语句中数据库名字带有反引号这是为了防止用户使用的数据库名刚好与 MySQL 系统关键字冲突。返回结果中如果包含类似/*!40100 DEFAULT CHARACTER SET utf8 */的内容这并不是普通注释。它表示当前 MySQL 的版本如果大于或等于 4.01就会执行这句话。1.4.2 修改数据库对数据库的修改主要指的是修改数据库的字符集或校验规则。ALTERDATABASEdb_name[alter_specification[,alter_specification]...];实例将mytest数据库的字符集改成gbkalterdatabasemytestcharsetgbk;1.4.3 数据库的删除DROPDATABASE[IFEXISTS]db_name;执行删除后的级联影响数据库内部将看不到对应的数据库。对应的数据库文件夹会被直接删除。这是一个级联删除行为意味着里面的所有数据表和数据全都会被一起清空。警告在实际生产和开发环境中绝对不要随意删除数据库1.5 数据库的备份与恢复1.5.1 数据库备份注意进行数据库备份时需要在Linux 命令行Shell中执行而不是在 MySQL 交互式命令行内。# 备份语法mysqldump-P3306-uroot -p密码-B数据库名数据库备份存储的文件路径# 备份示例将 mytest 库备份到 D 盘根目录mysqldump-P3306-uroot-p123456-BmytestD:/mytest.sql原理解析备份生成的.sql文件中实际上装载的是我们对整个数据库进行创建、建表、导入数据的所有 SQL 语句的历史重现。1.5.2 数据库恢复登录进入 MySQL 后使用source命令引入备份文件即可实现还原mysqlsource D:/mytest.sql;1.5.3 备份的进阶技巧与注意事项只备份其中的某张或某几张表mysqldump-uroot-p数据库名 表名1 表名2D:/mytest.sql同时备份多个数据库mysqldump-uroot-p-B数据库名1 数据库名2...数据库存放路径关于-B参数的重要说明如果备份一个数据库时没有加上-B参数该文件内就不会包含CREATE DATABASE和USE语句。因此在恢复时你必须自己手动先创建一个空数据库并使用use选中它然后才能运行source命令进行还原。1.6 查看数据库的连接情况showprocesslist;该指令可以清晰地告诉我们当前有哪些用户和主机连接到了当前的 MySQL 服务。安全小贴士如果发现某个连接的用户或者 IP 不是你正常登录的很有可能数据库已经被黑客入侵了。在以后的实际开发中如果发现数据库运行比较缓慢也可以通过该指令来排查是否有异常的死锁连接或大量堆积的查询。二、 MySQL 表的基本操作2.1 创建数据表在选定的数据库中创建一张表的语法如下CREATETABLEtable_name(field1 datatype,field2 datatype,field3 datatype)characterset字符集collate校验规则engine存储引擎;缺省规则如果没有显式指定表级别的字符集则默认以其所在的数据库的字符集为准。如果没有显式指定表级别的校验规则则默认以其所在的数据库的校验规则为准。2.1.1 创建表综合案例createtableusers(idint,namevarchar(20)comment用户名,passwordchar(32)comment密码是32位的md5值,birthdaydatecomment生日)charactersetutf8engineMyISAM;2.1.2 存储引擎与底层文件的关系不同的存储引擎在操作系统的磁盘上创建的底层表结构文件是不一样的。当我们创建上面的users表且引擎设置为MyISAM时在 MySQL 的 Data 目录下会产生三个文件users.frm用于保存表结构定义。users.MYD用于保存表数据。users.MYI用于保存表索引。如果我们将引擎指定为InnoDB通常会生成一个.frm表结构文件和一个.ibd将数据和索引合二为一的独占表空间文件。没有指明存储引擎的时候默认用配置文件里面的。2.1.3 查看表创建时的详细信息使用show create table 表名;可查看最完整的建表脚本。在终端中结合\G选项如show create table user1 \G能实现垂直列格式化输出大幅提升复杂表结构的可读性。你当时写的不是很标准的SQL语句在MYSQL内部的此法和语法分析之后会补充完善成为标准的SQL语句然后保存。mysqlshowcreatetableqwe \G--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|Table|CreateTable|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|qwe|CREATETABLEqwe(namevarchar(20)DEFAULTNULL,gendervarchar(60)DEFAULTNULL,hjkvarchar(300)DEFAULTNULLCOMMENT7978797,asdintDEFAULTNULLCOMMENT123456)ENGINEInnoDBDEFAULTCHARSETutf8mb3|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------2.2 查看表结构想要快速查看一张表包含了哪些字段以及各字段的属性可以使用如下指令desc表名;输出的信息中主要包含以下核心列Field字段名字。Type字段的数据类型。Null是否允许为空YES 或 NO。Key索引类型如主键 PRI 等。Default默认值。Extra扩充附加属性如自增 auto_increment 等。2.3 修改数据表ALTER TABLE在项目的实际开发与迭代中随着业务的发展经常需要修改已经存在的表结构。2.3.1 增加新字段ADDALTERTABLEtablenameADD(columndatatype[DEFAULTexpr][,columndatatype]...);实例在users表的birthday字段后面添加一个名为assets的新列用来保存图片路径altertableusersaddassetsvarchar(100)comment图片路径afterbirthday;核心特性新字段插入后对原表中的旧数据完全没有破坏性影响。原有的旧数据依然完好保存新字段在旧数据中的值会自动被填充为NULL。2.3.2 修改字段属性MODIFY如果需要调整字段的类型或者大小可以使用modifyALTERTABLEtablenameMODIFY(columndatatype[DEFAULTexpr]...);实例将users表中name字段的长度上限从 20 扩展修改为 60altertableusersmodifynamevarchar(60);2.3.3 删除字段DROPALTERTABLEtablenameDROP(column);实例从users表中删除password列altertableusersdroppassword;危险提示执行删除字段的操作一定要极其慎重一旦该列被删除该字段以及该列下对应的所有历史数据也将全部随之烟灭不可轻易逆转。2.3.4 修改表名RENAMEaltertableusersrenametoemployee;提示其中关键字to是可以省略不写的例如alter table users rename employee;也能达到同样的效果。2.3.5 修改列名与完整重定义CHANGE如果你想彻底改掉某个字段的名字应该使用change。altertableemployee change old_column_name new_column_name datatype;实例将employee表中的name列修改为xingmingaltertableemployee change name xingmingvarchar(60);注意使用change时即便不改变数据类型在指定了新列名后依然需要完整地写一遍它的数据类型与约束定义。2.4 删除数据表DROP[TEMPORARY]TABLE[IFEXISTS]tbl_name[,tbl_name];实例删除掉不再使用的t1表droptablet1;修改表和删除表非必要不要改。SQL是比较底层的东西上层依赖底层底层修改会让上层崩溃。好的本期内容就到这里如果对你有帮助还不要忘记点赞三联支持。我是此方我们下期再见。bye!
Re:Mysql数据库基础篇(三):全面掌握数据库与数据表操作:深度剖析底层文件差异与核心管理机制
发布时间:2026/6/12 23:20:10
◆ 博主名称 小此方-CSDN博客大家好欢迎来到小此方的博客。⭐️Linux系列个人专栏 【主题曲】Mysql⭐️此方的GitHub github_此方⭐️Re系列专栏我们思考 (Rethink) · 我们重建 (Rebuild) · 我们记录 (Record)文章目录概要序論一、 MySQL 数据库的基本操作1.1 创建数据库1.1.1 创建数据库案例1.2 字符集与校验规则的查看1.3 校验规则对数据库的影响1.3.1 实验环境准备1.3.2 校验规则对查询与排序的影响对比1.4 操纵与维护数据库1.4.1 查看数据库与显示创建语句1.4.2 修改数据库1.4.3 数据库的删除1.5 数据库的备份与恢复1.5.1 数据库备份1.5.2 数据库恢复1.5.3 备份的进阶技巧与注意事项1.6 查看数据库的连接情况二、 MySQL 表的基本操作2.1 创建数据表2.1.1 创建表综合案例2.1.2 存储引擎与底层文件的关系2.1.3 查看表创建时的详细信息2.2 查看表结构2.3 修改数据表ALTER TABLE2.3.1 增加新字段ADD2.3.2 修改字段属性MODIFY2.3.3 删除字段DROP2.3.4 修改表名RENAME2.3.5 修改列名与完整重定义CHANGE2.4 删除数据表概要序論本文深入讲解 MySQL 中数据库与数据表的核心操作与底层原理。阐述数据库创建的语法要素对比utf8_general_ci与utf8_bin校验规则对查询和排序的底层影响详解数据库的修改、安全删除以及通过mysqldump进行级联备份与恢复的工程实践剖析数据表创建流程揭示MyISAM与InnoDB存储引擎在磁盘文件结构上的本质差异演示ALTER TABLE在增加、修改、删除字段及重命名表时的应用与旧数据保留特性。好的我们直接开始。一、 MySQL 数据库的基本操作1.1 创建数据库SQL和文件也是上下层的关系SQL 语句Linux 文件系统本质创建数据库create database db_name;本质就是再/var/lib/mysql创建一个目录删除数据库drop database db_name;删除目录在 MySQL 中创建数据库的基本语法如下CREATEDATABASE[IFNOTEXISTS]db_name[create_specification[,create_specification]...];create_specification:[DEFAULT]CHARACTERSETcharset_name[DEFAULT]COLLATEcollation_name语法要点说明大写字母表示 SQL 关键字。方括号[]表示该选项是可选项。CHARACTER SET用于指定数据库采用的字符集它决定了数据库控制和支持什么语言。例如设置成utf8就可以支持中文。COLLATE用于指定数据库字符集的校验规则或校对规则它会直接影响字符串的排序和对比表现。1.1.1 创建数据库案例为了更好地理解我们来看几个具体的创建案例基础创建createdatabasedb1;注意当我们创建数据库而没有显式指定字符集和校验规则时系统会使用默认值。在 MySQL 5.7 中默认字符集通常是utf8默认校验规则是utf8_general_ci。指定字符集创建createdatabasedb2charsetutf8;//或者create database db2 character set utf8;同时指定字符集与校对规则创建createdatabasedb3charsetutf8collateutf8_general_ci;1.2 字符集与校验规则的查看我们可以通过以下指令来查看系统当前的状态或支持的配置查看当前系统默认的数据库字符集以及校验规则showvariableslikecharacter_set_database;showvariableslikecollation_database;查看当前 MySQL 数据库支持的所有字符集showcharset;查看当前 MySQL 数据库支持的所有字符集校验规则showcollation;1.3 校验规则对数据库的影响校验规则的不同会直接影响数据库在查询和排序时的表现。我们通过两组案例不区分大小写与区分大小写进行对比1.3.1 实验环境准备首先分别创建不区分大小写和区分大小写的两个数据库并插入相同的数据-- 1. 创建不区分大小写的数据库 testicreatedatabasetesticollateutf8_general_ci;usetesti;createtableperson(namevarchar(20));insertintopersonvalues(a),(A),(b),(B);-- 2. 创建区分大小写的数据库 test2createdatabasetest2collateutf8_bin;usetest2;createtableperson(namevarchar(20));insertintopersonvalues(a),(A),(b),(B);1.3.2 校验规则对查询与排序的影响对比校验规则类型查询where namea的结果排序order by name的结果utf8_general_ci(不区分大小写)会同时查询出a和A两条记录。排序时大小写字母交织在一起不作严格区分如a - A - b - B。utf8_bin(区分大小写)只能精确查询出a这条记录。依据 ASCII 码值进行严格排序大写字母排在小写字母前面如A - B - a - b。1.4 操纵与维护数据库1.4.1 查看数据库与显示创建语句查看当前服务中的所有数据库showdatabases;显示特定数据库的创建语句showcreatedatabase数据库名;说明MySQL 建议开发人员将关键字使用大写但这并不是强制性的。自动生成的语句中数据库名字带有反引号这是为了防止用户使用的数据库名刚好与 MySQL 系统关键字冲突。返回结果中如果包含类似/*!40100 DEFAULT CHARACTER SET utf8 */的内容这并不是普通注释。它表示当前 MySQL 的版本如果大于或等于 4.01就会执行这句话。1.4.2 修改数据库对数据库的修改主要指的是修改数据库的字符集或校验规则。ALTERDATABASEdb_name[alter_specification[,alter_specification]...];实例将mytest数据库的字符集改成gbkalterdatabasemytestcharsetgbk;1.4.3 数据库的删除DROPDATABASE[IFEXISTS]db_name;执行删除后的级联影响数据库内部将看不到对应的数据库。对应的数据库文件夹会被直接删除。这是一个级联删除行为意味着里面的所有数据表和数据全都会被一起清空。警告在实际生产和开发环境中绝对不要随意删除数据库1.5 数据库的备份与恢复1.5.1 数据库备份注意进行数据库备份时需要在Linux 命令行Shell中执行而不是在 MySQL 交互式命令行内。# 备份语法mysqldump-P3306-uroot -p密码-B数据库名数据库备份存储的文件路径# 备份示例将 mytest 库备份到 D 盘根目录mysqldump-P3306-uroot-p123456-BmytestD:/mytest.sql原理解析备份生成的.sql文件中实际上装载的是我们对整个数据库进行创建、建表、导入数据的所有 SQL 语句的历史重现。1.5.2 数据库恢复登录进入 MySQL 后使用source命令引入备份文件即可实现还原mysqlsource D:/mytest.sql;1.5.3 备份的进阶技巧与注意事项只备份其中的某张或某几张表mysqldump-uroot-p数据库名 表名1 表名2D:/mytest.sql同时备份多个数据库mysqldump-uroot-p-B数据库名1 数据库名2...数据库存放路径关于-B参数的重要说明如果备份一个数据库时没有加上-B参数该文件内就不会包含CREATE DATABASE和USE语句。因此在恢复时你必须自己手动先创建一个空数据库并使用use选中它然后才能运行source命令进行还原。1.6 查看数据库的连接情况showprocesslist;该指令可以清晰地告诉我们当前有哪些用户和主机连接到了当前的 MySQL 服务。安全小贴士如果发现某个连接的用户或者 IP 不是你正常登录的很有可能数据库已经被黑客入侵了。在以后的实际开发中如果发现数据库运行比较缓慢也可以通过该指令来排查是否有异常的死锁连接或大量堆积的查询。二、 MySQL 表的基本操作2.1 创建数据表在选定的数据库中创建一张表的语法如下CREATETABLEtable_name(field1 datatype,field2 datatype,field3 datatype)characterset字符集collate校验规则engine存储引擎;缺省规则如果没有显式指定表级别的字符集则默认以其所在的数据库的字符集为准。如果没有显式指定表级别的校验规则则默认以其所在的数据库的校验规则为准。2.1.1 创建表综合案例createtableusers(idint,namevarchar(20)comment用户名,passwordchar(32)comment密码是32位的md5值,birthdaydatecomment生日)charactersetutf8engineMyISAM;2.1.2 存储引擎与底层文件的关系不同的存储引擎在操作系统的磁盘上创建的底层表结构文件是不一样的。当我们创建上面的users表且引擎设置为MyISAM时在 MySQL 的 Data 目录下会产生三个文件users.frm用于保存表结构定义。users.MYD用于保存表数据。users.MYI用于保存表索引。如果我们将引擎指定为InnoDB通常会生成一个.frm表结构文件和一个.ibd将数据和索引合二为一的独占表空间文件。没有指明存储引擎的时候默认用配置文件里面的。2.1.3 查看表创建时的详细信息使用show create table 表名;可查看最完整的建表脚本。在终端中结合\G选项如show create table user1 \G能实现垂直列格式化输出大幅提升复杂表结构的可读性。你当时写的不是很标准的SQL语句在MYSQL内部的此法和语法分析之后会补充完善成为标准的SQL语句然后保存。mysqlshowcreatetableqwe \G--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|Table|CreateTable|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|qwe|CREATETABLEqwe(namevarchar(20)DEFAULTNULL,gendervarchar(60)DEFAULTNULL,hjkvarchar(300)DEFAULTNULLCOMMENT7978797,asdintDEFAULTNULLCOMMENT123456)ENGINEInnoDBDEFAULTCHARSETutf8mb3|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------2.2 查看表结构想要快速查看一张表包含了哪些字段以及各字段的属性可以使用如下指令desc表名;输出的信息中主要包含以下核心列Field字段名字。Type字段的数据类型。Null是否允许为空YES 或 NO。Key索引类型如主键 PRI 等。Default默认值。Extra扩充附加属性如自增 auto_increment 等。2.3 修改数据表ALTER TABLE在项目的实际开发与迭代中随着业务的发展经常需要修改已经存在的表结构。2.3.1 增加新字段ADDALTERTABLEtablenameADD(columndatatype[DEFAULTexpr][,columndatatype]...);实例在users表的birthday字段后面添加一个名为assets的新列用来保存图片路径altertableusersaddassetsvarchar(100)comment图片路径afterbirthday;核心特性新字段插入后对原表中的旧数据完全没有破坏性影响。原有的旧数据依然完好保存新字段在旧数据中的值会自动被填充为NULL。2.3.2 修改字段属性MODIFY如果需要调整字段的类型或者大小可以使用modifyALTERTABLEtablenameMODIFY(columndatatype[DEFAULTexpr]...);实例将users表中name字段的长度上限从 20 扩展修改为 60altertableusersmodifynamevarchar(60);2.3.3 删除字段DROPALTERTABLEtablenameDROP(column);实例从users表中删除password列altertableusersdroppassword;危险提示执行删除字段的操作一定要极其慎重一旦该列被删除该字段以及该列下对应的所有历史数据也将全部随之烟灭不可轻易逆转。2.3.4 修改表名RENAMEaltertableusersrenametoemployee;提示其中关键字to是可以省略不写的例如alter table users rename employee;也能达到同样的效果。2.3.5 修改列名与完整重定义CHANGE如果你想彻底改掉某个字段的名字应该使用change。altertableemployee change old_column_name new_column_name datatype;实例将employee表中的name列修改为xingmingaltertableemployee change name xingmingvarchar(60);注意使用change时即便不改变数据类型在指定了新列名后依然需要完整地写一遍它的数据类型与约束定义。2.4 删除数据表DROP[TEMPORARY]TABLE[IFEXISTS]tbl_name[,tbl_name];实例删除掉不再使用的t1表droptablet1;修改表和删除表非必要不要改。SQL是比较底层的东西上层依赖底层底层修改会让上层崩溃。好的本期内容就到这里如果对你有帮助还不要忘记点赞三联支持。我是此方我们下期再见。bye!