前言:村民由于工作需要补一下 MySQL,本篇就分享一下自己的学习经验以及一些资料(村民知道自己一直在鸽)。
本来村民也是打算写一写基础教程的,但是 B 站 UP 主高新强的系列视频 —— MySQL8零基础入门视频教程 十分照顾初学者,正适合新手村。村民看下来之后觉得很不错,视频内容比较全面,分 P 目录详细,示范操作讲解细致,因此就推荐给大家,但村民也会根据自己的实际需求按照视频的分P标题写一点分享,大家在观看视频的时候可以把村民的教程放在一边进行对照。
MySQL8.0 免费开源,可以直接从 官网下载 离线安装包进行安装。在安装过程中我们需要注意的是进行自定义安装,只安装服务器服务即可,否则会安装上一些我们在使用中不太需要的东西,这点在视频中也有强调。
上图是安装过程中选择加密方式的截图,在 MySQL 8.0 中更新了加密方式,在这里提及是因为后面视频会有所涉及,同时也会影响到可视化工具 Navicat 连接数据库。第一种加密方式 ( caching_sha2_password ) 是 MySQL 8.0 新增的,而第二种 ( mysql_native_passowrd ) 是 MySQL 5.X 版本中使用的,具体的作为新手也不需了解,只需知道就行了。由于目前还有很多数据库连接工具还不支持 caching_sha2_password 加密方式,因此选用该加密方式在使用旧版本的 Navicat 连接数据库时需要对数据库进行一系列设置(视频中有设置教程),选用第二种加密方式则不会有问题。在这里村民还是建议大家选用新的加密方式,毕竟要紧跟时代的步伐嘛。至于连接问题,大家可以采用按照视频中使用旧版本并进行设置的方式,也可以使用村民将在下面提供的资源。
在实际运用中很少使用控制台命令行的操作方式对数据库进行操作,更多的是通过可视化图形界面,而 Navicat 正是其中的佼佼者。村民本人在工作中也是使用 Navicat 连接数据库进行操作。
Navicat 有很多产品,根据不同数据库有 Navicat for MySQL,Navicat for MongoDB,Navicat for SQL Server 等,这些都是连接单一类型数据库的,视频教程中演示安装的是 Navicat for MySQL,村民建议安装的是 Navicat Premium,可以连接不同类型的数据库。
Navicat 最新版本已经更新到 Navicat 15,可以较好地支持 MySQL 8.0,而不用像视频教程中进行更改加密方式操作。由于 Navicat 产品是收费的,我们只能通过一些特殊途径进行使用。最新的 Navicat Premium 15 安装包可以从 Navicat 官网下载到,而特殊途径就是通过注册机进行破解。村民发现网络上有通过收费来换取注册机解压包密码,而村民手上刚刚好有资源,在这里无偿分享给大家,**添加程序锅微信( dawnguo6 ),发送 “ 注册机 ” 三个字 **即可获取资源。具体的使用教程村民也会放在资源里,大家有兴趣的自提。在使用特殊途径之前大家最好先关闭 Windows Defender 的实时保护。
在新建数据库时,我们需要选择字符集以及排序规则,在视频教程中选用的是 utf8 字符集,而村民在选用的是 utf8mb4 字符集。那么这两者这么像,又有什么区别呢?
utf8 只支持最长三个字节的 UTF-8 字符,也就是 Unicode 中的基本多文种平面。MySQL 在 5.5.3 之后增加了这个 utf8mb4 的编码,mb4 就是 most bytes 4 的意思,专门用来兼容四字节的 unicode。在一般情况下,使用 utf8 字符集基本足够且更加节省空间,那么为什么还要选用 utf8mb4 字符集呢?
utf8mb4 字符集相较于 utf8 字符集来说可以另外支持一些特殊的字符,比如说 emoji 表情。当你的数据库需要存储用户评论这种可能会包含 emoji 表情的数据时,我们就需要选用 utf8mb4 字符集。
关于排序规则的选择,当选用的字符集是 utf8 时默认的排序规则是 utf8_general_ci。由于字符集排序规则数量太多,大家也不必全部知晓,村民在这里只讲 utf8_unicode_ci 和 utf8_general_ci。简单来说,utf8_unicode_ci 准确度高,但校对速度稍慢;utf8_general_ci 校对速度快,但准确度稍差。在通常情况下,utf8_general_ci 的准确性足够满足我们的需求,因此选用 utf8_general_ci 即可,若是 utf8mb4 字符集则选择 utf8mb4_general_ci 即可。
在实际中,我们可以将数据库的字符集设置为 utf8,而只将需要保存 emoji 表情的数据表甚至某些字段设置为 utf8mb4 字符集即可,这样在一定程度上可以节省空间。
在新建表时,村民基本只选择 MyISAM 和 InnoDB 两种存储引擎。当表中的数据以查询和插入为主时,比如存储用户上传的图片、用户的交易记录等表可以选择 MyISAM 引擎,而当经常需要对表进行修改操作的表则选择 InnoDB 引擎较好。在刚开始使用时,大家大可以不必考虑很多,全部选择 InnoDB 引擎即可。
村民认为既然学习 MySQL,那么对数据类型的熟悉就极为重要。事实上,在定义数据字段时选用合适的数据类型是优化数据库的重要方法之一,也是最基础的方法。MySQL支持多种类型,大致可以分为三类:数值、日期/时间和字符串类型。在学习过程中,村民经常把自己容易忘且需要时常看看的网站等放在收藏夹中,关于数据类型,菜鸟教程上写的较为详细,视频中的图片应该也是上面截取来的,大家可以浏览查阅。
DDL 用来定义数据库对象:创建库、表、列等。
DML 用来操作数据库表中的记录,对表中的数据进行增、删、改、查的操作。
当我们是用 Navicat 右键点击一张数据表时,会发现有 删除表、清空表、截断表 三个选项。删除表就是从数据库中永远删除该表;清空表是清除当前数据表中的所有数据,但是数据表结构仍保留;截断表清除当前数据表中的所有数据也不保留数据表结构。假设一张表的自增 id 已经为 10,当我们清空表后再新增一条数据时新增数据的 id 为 11,而使用截断表时新增数据的 id 为 1。因此,Navicat 中的清空表相当于删除表命令,而截断表相当于截断表命令。
DQL 用来查询数据。
DDL、DML、DQL 三部分内容是会频繁应用的,因此十分重要,这里村民单独整理了一下。视频中关于书写顺序和执行顺序的讲解,村民也是第一次了解,之前并未在书上看过类似内容,这也是为什么村民将这个视频分享给大家的原因——内容讲得比较细。
DCL 用来定义访问权限和安全级别。
在这一P的视频中提到了通过拆分表操作来减少数据的冗余,也多次提到了关系这个字眼。这里村民想强调一点,那就是 MySQL 是关系型数据库,特别要注意多张表之间的联接关系,这一分P的标题——多表外键参照约束,也是在提醒我们要注意这一点。村民自己在刚开始建表的时候也不注重对各表的关系进行梳理,导致表中有很多冗余的数据,也是遭到了前辈的批评。因此大家打算建立多张数据表之前,一定要先理清各表之间的联接关系,但是有些时候为了能达到项目的需求,冗余的数据也并非一概否定,这就需要大家根据实际应用因地制宜了。
如果大家看完了视频,那么一定对 MySQL 有一定的了解也会使用一些常用的命令。在这里村民讲几句多余的话,对数据库感兴趣的同学还是要好好学习的,村民是比较反感那些标题党文章的,虽然这些文章也不乏有价值的内容。对于新手而言,村民觉得温习和练习是十分必要的,毕竟那么多命令也不是一下子就能完全掌握的。村民本人在工作中不乏练习机会,使用时忘了用法就翻一翻,往往复复一些命令用的就得心应手了。
不甘于「本该如此」,「多选参数 」值得关注