从零敲开 MySQL 的大门:库与表的基础操作实战(保姆级入门指南)

从零敲开 MySQL 的大门:库与表的基础操作实战(保姆级入门指南)

                🔥海棠蚀omo个人主页

                ❄️个人专栏《初识数据结构》《C++:从入门到实践》《Linux:从零基础到实践》《Linux网络:从不懂到不会》《MySQL:新手入门指南》

                ✨追光的人,终会光芒万丈

博主简介:

目录

一.库的操作

1.1创建数据库

1.1.1编码集和校验集

1.1.2校验规则对数据库的影响

1.2操纵数据库

1.2.1查看数据库

1.2.2修改数据库

1.2.3删除数据库

1.3数据库的备份与恢复

二.表的操作

2.1创建表

2.2查看表结构

2.3修改表

2.3.1ADD操作

2.3.2MODIFY操作

2.3.3DROP操作

前言:

那么今天这篇文章呢我们就要进入新的领域了,那就是:MySQL,俗话说" 万丈高楼平地起 ",想要玩转 MySQL,第一步当然是得给咱们的数据建个踏实的" 家 "。



那么这篇文章我们就从零开始动手一起把 MySQL 最核心的底盘手艺——库与表的基础操作给整明白,下面我们就一起来看看吧。

一.库的操作

那么下面我们就来详细了解一下库的增删查改的相关操作。

1.1创建数据库

我们要对一个库进行操作的前提是我们得有一个库,所以首先我们要了解的操作就是如何创建一个数据库,那么下面我们就来看看:

那么对于创建一个数据库的完整操作就是如上图所示,但是只看上面我们可能看不懂什么意思,下面我们就来实操一下:

那么这个命令最简洁的操作就如上图所示,create database + 库名称 + ;号就可以完成创建一个数据库的操作,而上面我们展示出来的明显不止这么点东西,那剩下的都是哪些内容呢?

1.大写的表示关键字

2.[]是可选项

3.CHARACTER SET:指定数据库采用的字符集

4.COLLATE:指定数据库字符集的校验规则

那么第一条我们就不介绍了,而对于第二条的[],在上面我们可以看到中间有一个[IF NOT EXITS],加上这个其实表示的意思就是如果当前要创建的数据库不存在的话就创建,存在的话就不会创建。

我们下面主要讲的重点就在后两条上面,下面我们就来看看这两者。

1.1.1编码集和校验集

我们要知道,在我们创建数据库的时候,是有两个编码集的,分别是:数据库编码集,数据库校验集,那么这两个代表什么意思呢?

数据库顾名思义是用来存储数据的,那么我们该怎么去存储这些数据呢?

所以是不是就要有相应的编码格式来存储这些数据呢?

答案是肯定的,所以上面的编码集就是未来数据库存储数据的编码格式,但是我们不只是要存储数据,我们还要将数据读取出来,那么此时该如何读取呢?

答案就是校验集,我们在存储数据的时候要按照编码集的编码格式来进行存储,那么我们在读取数据时也要按照某种编码格式来读取数据,而这种编码格式就叫做编码集。

并且,最重要的一点就是无论数据库对数据做任何操作,都必须保证操作和编码必须是编码一致的!!!

那么说了这么多,编码集和校验集到底长什么样呢?下面我们就来见一见:

我们可以在命令行中输入:show charset;,通过这行语句就可以查看数据库支持的所有字符集,在这张图中左边Charset一列就是编码集,而Default collation这一列就是它所对应的校验集。

那么不只是能查看字符集,我们也可以通过另一个指令来查看字符集的校验规则:

这个指令就是:show collation;,通过这个指令我们可以得到和上面相似的结果,不过在上面这张图中,左边Collation一列是校验规则,旁边的Charset一列就是所对应的编码集。

那么在上面两幅图中我们看到编码集和校验集是有很多的,那么我们平常用的是什么呢?或者说默认的字符集以及校验规则是什么呢?

那么我们就可以通过上面的两个指令来进行查看,从上图我们可以看到我们上面创建的数据库默认的字符集以及校验规则分别是:utf8mb3,utf8mb3_general_ci。

对于这两个我们就可以认为编码格式就是我们经常见到的utf-8和它所对应的校验规则。

那么如果我们不想使用默认的字符集以及校验规则该怎么办呢?

答案就藏在上面创建数据库指令后面的可选项中,线面我们来演示一下:

那么在上面呢我们又重新创建了一个数据库d2,而这次在创建时我们在后面加上了 collate=utf8_bin,并且我们再次通过上面的两个指令来查看当前数据库的字符集以及校验规则时,校验规则就发生了改变。

那么不同的校验规则对于数据库有什么影响呢?或者说不同的校验规则之间有什么区别呢?

1.1.2校验规则对数据库的影响

这里我们只讲最常见的区别,即不区分大小写,什么意思呢?下面我们用一个例子来说明:

那么首先对数据库d1进行操作,这里我们创建一张表,表中只有一列数据就是name,我们随意给这一列添加了几个属性,即大小写字母。

添加完成之后我们通过select指令来提取表中内容为' a '的内容,可以看到当校验规则为utf8mb3_general_ci的时候,提取的结果为:' a '和' A ',即并没有区分大小写。

那么数据库d2的结果如何呢?下面我们来看看:

而数据库d2得到的结果却是与d1并不相同,同样创建了一个表,填入了同样的数据,最终通过select语句得到的结果只有:' a ',没有' A ',说明校验规则utf8mb3_bin会区分大小写。

1.2操纵数据库

在上面我们我们讲了创建数据库的相关内容,下面我们就讲解一下关于数据库的其它操作。

1.2.1查看数据库

未来我们创建了很多数据库后,我们要怎么查看曾经创建了那么多的数据库呢?

指令很简单,即:show databases;,通过这个指令我们就能看到我们都有哪些数据库,我们曾经创建的d1和d2两个数据库就在其中。

而在查看数据库这里,我们可能还会遇到一种情况,即:当我们在某个数据库操作了很长时间后,可能会遗忘自己到底在哪个数据库中进行操作的,那么此时该如何查看当前所在的数据库呢?

我们可以通过select database();这个指令就可以查看我们当前所在的数据库,从上图可以看到,我当前所在的数据库就是d2。

并且我们不止可以查看上面的一些信息,还能够查看我们创建数据库是的语句,我们来看:

我们可以通过show create database + 数据库名的指令来进行操作,在表格中的数据库名称后面就是我们创建数据库时的语句,而在这里面还有一些细节:

1.MySQL建议我们关键字使用大写,但不是必须的



2.数据库名称的反引号是为了防止使用的数据库名刚好是关键字



3./*!40100 default.... */这个不是注释,而是表示当前mysql版本大于4.01版本,就会执行这句话,后面的跟的那一行也是如此

1.2.2修改数据库

那么对于修改数据库的部分我们主要是修改数据库的字符集以及校验规则,那么该如何进行修改呢?

首先我们先创建一个数据库,不指定字符集以及校验规则,可以看到默认的字符集以及校验规则就是utf8,那么下面我们就要修改d3数据库的的字符集以及校验规则,我们来看:

通过alter指令我们就可以完成对一个数据库字符集以及校验规则的修改。

那么上面我们修改了数据库的字符集以及校验规则,可能有人会问:如果我要想修改数据库名称呢?

答案是MySQL并没有提供直接修改数据库名称的指令,因为修改数据库名称这种操作太过危险,如果你修改了数据库名称,但是上层在使用时还用的是之前的数据库名称,那么就会出问题。

1.2.3删除数据库

删除数据库的操作就·非常简单了,我们来看:

我们只需要通过drop database + 数据库名称的指令就可以完成对一个数据库的删除操作。

但是删除数据库后的结果,即:

1.数据库内部看不到相应的数据库



2.对应的数据库文件夹被删除,级联删除,里面的数据表全部被删

所以我们在实际操作中不要随意删除数据库。

1.3数据库的备份与恢复

上面我们讲了数据库的增删查改操作,这里我们再补充一点,即数据库的备份与恢复。

我们先来看数据库的备份操作:

对于数据库的备份完整操作就如上图所示,那么下面我们来实操一下:

我们要想执行上面的备份操作得先退出MySQL,在命令行中执行上面的语句,因为我现在是root用户,所以不需要密码。

那么如果我们现在已经对数据库d3进行了备份,如果我们在未来不小心把它删除该怎么去恢复呢?

答案就是我们可以通过source命令来进行恢复,那么这时可能有人就会问:为什么通过d3.sql文件就可以恢复d3数据库呢?

这个问题的答案我们就要来查看d3.sql文件的内容了,我们来看:

我们可以看到在这个文件中就有我们创建d3数据库时的语句,所以我们未来只要执行里面的语句就可以恢复我们的数据库了。

最后我们再来看一些注意事项:

1.如果备份的不是整个数据库,而是其中的一张表







2.如果同时备份多个数据库







并且如果备份一个数据库时,没有带上-B参数,那么在恢复数据库时,需要先创建一个空数据库,在执行source指令来恢复。

二.表的操作

在上面我们完成了对库的相关操作,那么下面我们就来学习一下表的相关操作。

2.1创建表

和上面的顺序一样,这里我们也是先讲解创建表的操作:

这里面有几个属性我们来说明一下:

1.field标识列名



2.datatype表示列的类型



3.character set 字符集,如果没有执行字符集,则以所在的数据库的字符集为准



4.collate校验规则,如果没有指定校验规则,则以所在数据库的校验规则为准

这里面列的类型datatype我们下一篇专门来讲解,这里就先跳过,那么下面我们就来进行实操演示:

那么在上面我们就创建了一个名为test1的表,里面有id,name等几列,后面跟的comment是对前面列的说明,这里我们指明test1的存储引擎为MyISAM。

并且我们可以看到在user目录下生成了.sdi,.MYD,.MYI这三个文件,因为我使用的是较新版本的MySQL,所以生成的是.sdi文件,而在较老版本的MySQL中,生成的是.frm文件。

那么指定不同的存储引擎有什么区别呢?我们来看:

这里我们再创建一个表test2,存储引擎我们使用的是Innodb,而当我们再次查看user目录下的文件时,就可以看到test2就只有一个.ibd的文件。

所以对于存储引擎的不同我们看到的最直观区别就是生成的文件个数和类型是不一样的。

2.2查看表结构

那我创建了一个表,并给这张表中填充了一些属性,我该怎样去查看呢?

我们可以通过desc指令来查看当前表的属性,下面我们来看这张图:

在上面这张图中就介绍了这几列的属性的含义,除了最前面的字段名字,剩下的属性我们在后面的章节中再去讲解。

除了上面的desc指令,如果我们想要查看当前的数据库中都有哪些表,我们可以这样做:

和查看数据库是一样的操作,通过show tables指令就可以查看当前数据库中都有哪些表。

2.3修改表

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

那么上面的这些操作就可以总结为:

ADD,MODIFY,DROP这三种操作,那么下面我们就针对这三种操作来进行讲解。

2.3.1ADD操作

在执行ADD操作之前我们先向表中添加一些数据:

现在我们向test1表中插入了两条数据,那么下面我们想在这张表中再加上一列属性,叫做:path,即图片路径,那么该怎么通过ADD来进行操作呢?

那么在上面我们就通过alter指令成功给test1表中添加了一列属性:path。

而在上面的指令中我们要注意一些地方:

1.通过add添加属性时,后面还要跟上对应的类型



2.如果要想将新增的属性加在某一列后面,可以使用after + 列名

并且我们可以看到插入新字段后,对表中原来的数据是没有影响的。

2.3.2MODIFY操作

在上面我们讲了ADD的操作,那么下面我们就来看看MODIFY操作,而对于MODIFY操作可玩性就很多了,比如:修改某一列的属性,修改表名,删除某一列等操作,下面我们一一来演示。

同样是使用alter指令,在上面我们就将name的类型从varchar(20)改为了varchar(60),与上面对比我们将中间的add改为了modify。

如果我们要删除某一列,同样使用alter指令,不过中间就不需要加上modify了,直接通过drop + 列名就可以完成该操作。

那么下面我们就来看看修改表名是如何进行操作的:

将后面的操作改为:rename to + 表名;即可完成对表名的修改。

既然都能对表名进行修改,那么该如何对列名进行修改呢?

和上面类似,将后面的内容改为:change 旧列名 新列名 + 新列名类型;即可完成对列名的修改。

2.3.3DROP操作

删除表就和删除数据库一样简单,我们来看:

直接就是drop table + 表名;即可完成删除表的操作。

以上就是从零敲开 MySQL 的大门:库与表的基础操作实战(保姆级入门指南)的全部内容。

Read more

Flutter 三方库 lexo_rank_generator 的鸿蒙化适配指南 - 掌控极致资产排序、Jira 级排序算法实战、鸿蒙级精密列表索引专家

Flutter 三方库 lexo_rank_generator 的鸿蒙化适配指南 - 掌控极致资产排序、Jira 级排序算法实战、鸿蒙级精密列表索引专家

欢迎加入开源鸿蒙跨平台社区:https://openharmonycrossplatform.ZEEKLOG.net Flutter 三方库 lexo_rank_generator 的鸿蒙化适配指南 - 掌控极致资产排序、Jira 级排序算法实战、鸿蒙级精密列表索引专家 在鸿蒙跨平台应用执行复杂的数据排序与动态位置认领(如构建一个支持用户拖拽排序的看板系统、处理海量任务的优先级实时重排或是实现一个具备极致写入效能的无限列表索引)时,如果依赖简单的“整数序号(Integer Index)”,极易在处理“中间插入(Re-ranking)”时陷入全量数据更新的性能泥潭导致数据库写入爆炸。如果你追求的是一种完全对齐 Jira 级 LexoRank 排序规范、支持字符串级无限细分且具备极致算法确定性的方案。今天我们要深度解析的 lexo_rank_generator——一个专注于通用 LexoRank 排序算法生成的顶级工具库,正是帮你打造“鸿蒙超感资产调度中心”的核心重器。 前言 lexo_rank_generator 是一套专注于解决“由于频繁插入导致的数据库重排序长尾”

By Ne0inhk
【算法通关指南:算法基础篇】二分算法:1.在排序树组中查找元素的第一个和最后一个位置 2.牛可乐和魔法封印

【算法通关指南:算法基础篇】二分算法:1.在排序树组中查找元素的第一个和最后一个位置 2.牛可乐和魔法封印

🔥小龙报:个人主页 🎬作者简介:C++研发,嵌入式,机器人方向学习者 ❄️个人专栏:《算法通关指南》 ✨ 永远相信美好的事情即将发生 文章目录 * 前言 * 一、二分算法 * 二、在排序树组中查找元素的第一个和最后一个位置 * 2.1题目 * 2.2 算法原理 * 2.3代码 * 三、牛可乐和魔法封印 * 3.1题目 * 3.2 算法原理 * 3.3代码 * 总结与每日励志 前言 本专栏聚焦算法题实战,系统讲解算法模块:以《c++编程》,《数据结构和算法》《基础算法》《算法实战》 等几个板块以题带点,讲解思路与代码实现,帮助大家快速提升代码能力ps:本章节题目分两部分,比较基础笔者只附上代码供大家参考,其他的笔者会附上自己的思考和讲解,希望和大家一起努力见证自己的算法成长 一、

By Ne0inhk
【C语言手撕算法】LeetCode-142. 环形链表 II(C语言)

【C语言手撕算法】LeetCode-142. 环形链表 II(C语言)

【C语言手撕算法】LeetCode-142. 环形链表 II(C语言) * 一、题目介绍 * 二、题目详解 * 1.审题 * 2.判断是否为环形链表 * (1)思路 * (2)代码演示 * 3.找到入环节点 * (1)思路 * (2)代码演示 * 三、考考大家 * 结语 前言: 本专栏将给大家带来一些有意思的算法题 希望对大家有所帮助 若内容对大家有所帮助,可以收藏慢慢看,感谢大家支持!!! 谢谢大家 ! ! ! 一、题目介绍 本篇是小编从leetcode上挑选的一道例题 同时,还是一道难度较大的面试题 就让我们来手撕这道面试题吧 下面是题目链接: LeetCode-142. 环形链表 II 二、题目详解 1.审题 老规矩,拿到题目先审题,题目要求返回链表开始入环的第一个节点

By Ne0inhk
【数据结构】哈希扩展学习

【数据结构】哈希扩展学习

目录 1. 位图 1.1 位图相关面试题 给40亿个不重复的无符号整数,没排过序。给一个无符号整数,如何快速判断一个数是否在这40亿个数中。(本题为腾讯/百度等公司出过的一个面试题) 1.2 位图的设计及实现 1.3 C++库中的位图 bitset 1.4 位图的优缺点 1.5 位图相关考察题目 • 给定100亿个整数,设计算法找到只出现一次的整数? • 给两个文件,分别有100亿个整数,我们只有1G内存,如何找到两个文件交集? • 一个文件有100亿个整数,1G内存,设计算法找到出现次数不超过2次的所有整数 2. 布隆过滤器 2.1 什么是布隆过滤器 2.2 布隆过滤器器误判率推导 2.3 布隆过滤器代码实现 2.4 布隆过滤器删除问题 2.

By Ne0inhk