00:00
好,同学们,咱们接着往下讲,那回顾一下咱们啊,这个咱们从这个第零三章开始啊,咱们就开始讲这个circle内容了,那一直呢,我们是目前呢,是到这个第11章对吧?咱们在一开始讲这个circle的时候呢,我给大家说过,咱们讲circlel分成三条主线,还记得吧,那分别对应的呢,叫做DDL,哎,我在这呢,简单写一下DML和DCL对吧?那么DDL呢,就是我们说创建和管理表,那对应的就是咱们在讲到这个第十章当中呢,我们是不是讲的这个事啊。好,没问题,然后这个DM2呢,我们说分成叫增删改查,那么这个增删改呢,咱们是放到了这个第11章当中来讲解的,那么查询的话呢,咱们说呢,叫重中之重啊,重呢是相当于我们这三个里边呢,DML呢是重的,就是使用的非常频繁,对吧,然后在这里边儿这个查询呢,又是最重的,这个最重要的,而且呢,难度上来讲也是最大的啊,这叫重中之重,那么这个查询的话呢,咱们是从这个零三章那一直呢,讲到了我们这个第九章,那整个的这块呢讲呢,其实是比较厚实的,后续的话呢,大家就需要结合自己的实际的开发的这个场景呢,我们去来写自己的这个查询语句。
01:10
那我们上篇呢,主要是在于用,那下篇的时候呢,我们重点在于性能,就是我们怎么样去写这个查询呢,可以使得我们整个的运行的性能是最高的。那我们知道了,线上这个系统呢,我们要想能够解决它的瓶颈呢,实际上呢,我们有多个维度的啊,像代码层面的,像我们这个呃需这个服务器这个层面的,对吧?你涉及到硬件层面的一些这个扩容啊等等,这也是一点,包括呢,我们这个线上的这个系统的话呢,在内存分配层面是不是合理,这就涉及到这个GM调优层面的,那同样的话呢,我们跟数据库呢,是不停的在做交互,那么这个交互层面呢,也是有这个性能提升的这个讲究的,对吧?那我们现在呢,呃,谈的其实就是数据库了,下篇呢,我们重点呢谈那个性能的一个提升。好,那么接着说我们这个DCL的话呢,里边涉及到内容呢,也是比较丰富的,那我们可以简单的分成两部分,第一部分呢,就涉及到跟事物相关的,那咱们也可以呢,叫TCL了,Transaction control language,那我们提到了叫commit和。
02:10
那么这两个指令的话呢,咱们是不是在这个第十章当中讲到这个清空表叫做tnket table的时候呢?咱们给大家介绍完了是这意思吧,好的,那么接下来的话呢,还有关于什么呀,比如说我们去创建用户,那这时候我们可以给的用户呢,去grant权限叫富裕权限,还可以呢,去回收相应的权限叫做revoke,那么这块这个指令呢,我们还是放到这个下篇当中,讲到用户,讲到角色,讲到权限管理的时候呢,我们去给大家去讲解。好,那么按说的话呢,我们关于这个circle的这三条主线呢,算是基本上告一段落了,对吧,那我们下边还有哪些内容呢?那其实说呢,我们下边这块呢,咱们如果说再分一条线的话呢,那我倾向于这样呢,去做一个区分。这样打一条线,那么这条线下边的话呢,实际上呢,就涉及到我们除了这个数据库中的表之外呢,我们说还有其他的一些结构,那大家上面也注意到了,咱们查询的话呢,都是基于表的,那创建结构的话呢,我们都是create,是不是table啊。
03:12
啊,当然那个你create database,那那得是一个必须先有那个东西了,在数据库下我们有create table对吧,那么除了create table之外呢,我们还可以去create其他的一些相关结构,这呢,我们是第14章开始,咱们在讲这个事儿,那么这个14章之前呢,这块我们还有两章,这两章是讲什么的呢?对吧,诶我们要给大家说一下。呃,一般的话呢,这个我们下边要讲的,按说呢,其实是该讲这个第13章了,也就是说我们要讲这个约束,这个约束的话呢,就是我们在创建表的时候呢,给这个字段呢,加入的一些限制,比如说飞空啊是吧,是不是唯一呀,哎,包括呢,我们前面呢,有的时候可能一不小心冒出个词主见呀,外键呀,对吧,这都是什么概念呢?实际上呢,就是一些约束,这呢是我们第13章当中来讲的,相当于也是对我们表中。
04:03
还是讲表的对吧,14章以后才不是表了,对我们表中的一些字段的一些限制啊,到时候我们讲这个第13章,那为什么在这个第13章之前,我这块又加入一个章节,大家看得很清楚对吧,那实际上呢,在线下呢,在讲课的时候呢,我是这个没有这个第12章的。啊,那包括这个第12章这个课件呢,整理呢,也确实花了一些这个时间啊,里边稍微的细碎一些OK。什么意思啊,就是我们在创建一个表的时候呢,大家也注意到了,我们需要呢,是不是指明你这个表中的每一个字段,它对应的这个类型是这意思吧,每个字段的对应的类型,那前面呢,我们已经讲过这个创建表了,那这个类型这块呢,实际上我们没有细致的展开去给大家去说啊,我们光说了说大家如果要是整形的话,你就可以用一个int,你要是浮点类型的话呢,大家先用着double是吧,先用double啊,Float呢,先用着也行,那到底这个float跟double我们使用有没有问题呢?开发中有没有一些建议呢?对吧?包括呢日期类型的,我们有data time,实际上还有像这个time step,还有这个专门叫year的,我们做这个上一章的练习当中,不就专门有一个呢,就光指明它那个,比如说那个动物宠物,它的那个死亡时间是不是叫death里边光有一个year啊。
05:19
对吧,呃,Birth是吧,哪一年出生的,我们广汽这个年诶,那这时候这个year是不是也是一个单独的数据类型啊,对吧,那以及除此之外呢,还有哪些呢?那这块呢,我们就需要呢,给大家来讲解一下这个事儿。啊,那为什么讲讲讲这么细呢?呃,这里边儿呢,还涉及到一个点,就是说我们在创建表当中啊,我说的是实际生产环境当中啊,咱们在创建一个表的时候呢,实际上这个字段啊,你要设置的不合理的话,一方面。影响精度,你比如说我们涉及到一些资金的一些计算的时候呢,如果你要用float跟double,可能这个精度呢,就存在损失,那这个损失一旦累积起来的话呢,这可能是一个很大的一个事故,这呢首先是需要大家来注意的,对吧,这是一点,那么第二点的话呢,就是说有的时候呢,可以用这个,也可以用这个,那么我们到底用哪个更合适呢?我们得具体问题具体分析啊,那这里边儿一个影响点是什么呢?就是性能的问题。
06:14
哎,就是性能的问题,咱们,呃,老同学可能说说老师你不是说下篇我们才讲这个性能嘛,对咱们下篇的话呢,关于这个表设计这块的话呢,我们会去讲这个一个内容,就是关于这个叫数据库的设计规范。啊,当然说叫数据库的设计规范,主要呢,咱们针对的还是这个表,那么这个表的话呢,我们会讲到,呃,什么叫一范式,二范式三范式,对吧,什么叫这个八四范式,什么叫反范式啊,什么叫四范式五范式啊,挺多的哈,还有呢,我们上篇呢,也提到过这个ER模型涉及到了一对一,一对多,多对多这种表数据之间的这种关系。对吧,那下篇当中呢,我们就专门呢,在这一章当中,咱们看看这个表咱们怎么设计呢,是合理的,那么这个表设计当中的一个小细节的环节呢,就是去设计你这个表中字段的类型,那么因为这个呢,主要是咱们上篇当中来创建表的时候呢,来提到这个类型的,所以呢,我就把这个内容啊,咱们就放在这个上面当中给大家讲是更合适一些的。
07:16
啊,啰嗦了这么多,总结一句话呢,就是我们数据类型这块呢,是需要大家来关注的,那我呢,会用这一章的这个时间呢,咱们把这个MYSQL当中涉及到这个数据类型啊,都给大家过一遍啊,很细碎啊,这一章这个准备这个课件的话呢,也花了一些这个时间啊,确实花了一些时间啊,呃,但是的话呢,我这会儿花了时间以后呢,大家在看的时候呢,我们尽量把这个冗余的这个事儿呢,给他这个压缩一下啊,因为我们这个一点点细致的去去弄,弄完之后的话呢,其实核心的总结出来的点呢,就那么几条。所以说呢,尽量呢,哎,我把中间这个时间呢,咱们做一个压缩,把最精华的部分呢留给大家啊,当然里边这些细节点呢,我该说的肯定都还是会说到的啊,因为大家这个时间呢,也是比较宝贵的啊,我们呢就还是奔着这个实际开发这个场景中去,我们最后呢,还会给大家一个,你看前面呢,也会有开发中的一个经验的这个这个讲解,后边呢,我们还有整体的一个总结,包括呢,像阿里,像咱们国内的为代表的啊,阿里不管是它的这个Java环境也好,还是说它整个这个数据库的这个生态也好啊,阿里巴巴在国内呢,那肯定是首屈一指的,它的一些规范呢,也会影响到相关一系列公司中的规范都是怎么做的啊,我们这块呢,都会给大家呢讲清楚。
08:30
啊,都给大家讲清楚。好,那我们呢,首先呢,来看一下在咱们MYSQL数据库当中啊,数据类型都有哪些,那这张图呢,咱们在讲到这个创建表的时候呢,诶其实给大家呢,稍微的看过一眼,咱们没有去细说,好那下边的话呢,我们先整体过一下,接下来的话呢,我们再一波一波呢去讲解这些具体的数据类型。好,我这块呢,首先呢,来一个大的一个分类,那么大的分类这块呢,首先我们在数据库中存数据啊,是不是很大一部分内容呢,存的是不是都是一些数值类型的呀。
09:04
那么数值类型都涉及到有哪些具体的这个类型呢?我这儿呢,框框了一下,诶,大家你会看到,呃,涉及到了有整形的。啊,就是我们说呢,就不带那种小数点了,对吧,那里边对应的像这个t int small int medium int啊还有int或者你写成也可以。还有in,这呢是我们说的叫整数类型。还有呢,就是带小数点的。没问题吧,那么带小数点的话呢,其实呢,是有两个类型。一个呢,叫做浮点类型,就是我们大家呢,接触其他编程语言的话呢,通常看到的float跟double,一个是单精度,一个是双精度,对吧?呃,另外这块还多了一个叫做定点数的类型,叫做decimal。那为什么还多一个它呢?呃,这个我们先简单一说啊,当然这个话呢很重要啊,就是说呢,这个浮点类型呢,大家如果接触过其他的编程语言都会知道,他们是存在精度损失的,就是当我们这个小数位呢,很长的时候呢,他们就会出现一个四舍五入的情况,那么为了精准的去表达一个小数呢,那我们这呢,又引入了一个叫做decimal。
10:07
那就是它了,哎,那么推荐大家使用谁呢?咱们先把结论抛出来,推荐用decible OK,好,那另外一个呢,叫做V类型,那叫做bit,那我们呢,可以去存储像二进制的这样类型的这个数据,这叫bit类型的,那虽然使用范围呢,我们说比较小一些,但是至少也算是一个独立的类型了,对吧。就跟这个世界上呢,这每一个呢,就好比是一个国家一样,那有的国家呢很大,那像美国呢就很大,那它占据世界占的资源也很多,每年排放的二氧化碳也很多啊,他老是让别人这块呢少排放点是吧?啊,那么有的国家呢,也很小,那像这个摩洛哥呀等等那些国家呢,他就特别小,但是呢,你要开联合国大会的话呢,是不是人家摩洛哥也得坐在这儿啊,虽然说还没有你美国的一个州大,但是人家呢,好歹也是个国家嘛,那就是这个意思啊,那为类型的,虽然我们用的少,但是呢,好歹人家也算是整体上的一部分啊。地位的话呢,肯定是跟你这些呢,都是平起平坐的,OK,就相当于摩洛哥的这个国王,这个要去美国的话呢,那基建呢,肯定也得美国总统是吧,或者至少这个级别得很高的啊,这个副国级的啥啥的啊,你不能让人家一个小州的或者一个小市的市长去接待人家的一个国家的一个这个一把手,那就不太合适了,不对等,对吧。
11:17
好,这呢是我们说的这个数值类型的,然后接下来的话呢,我们有非常重要的一类类型,叫做日期时间类型啊,这块呢,大家想必也能很清楚,那为什么说我们在这个数据库这块呢,非常重点的去强调日期时间呢,大家可能在编程当中,你不管你写Java呀,写C啊,写Python啊等等,那我们在数据类型呢那块呢,当然也有日期时间,但是好像没有像数据库当中一样提的这么频繁。想想是吧,因为呢,我们这个数据呢,你像它都存在数据库里边,我们需要记录一下你什么时候添加的是吧?哎,你什么时候有修改过,像咱们说的这种日志文件等等,他们核心的不都得是记录这种时间吗。啊,那么呃,我们这里边儿呢,就必须得需要有这个时间的这样的一个呃描述啊,时间的一个描述,OK,所以在数据库当中呢,我们这个日期时间的类型还是非常重要的,那么再往下。
12:06
再往下的话呢,这块呢,是可以这样子的啊,我就这样的一搂,诶大家你会发现我这一搂呢,是不是就搂上好大一块,那么好大这一块里边呢,我们又细分了什么呀?呃,这个呢是数据库,它的一个叫法,就是他把这些呢,其实都称为呢,叫做字符串类型,包括呢,像这个杰森呢,咱们也可以给它归进来啊,这叫字符串类型,那我这里呢,就把这个字符串类型,我又具体的拆了拆,就是纯文本类型的,就是我们存储,比如说你的家庭住址啊。你的电话号码呀,对吧,还有呢,我们一大段文文本内容,比如说涉及到我们针对于某一个文章的一个评论,那么这个评论的话呢,内容量可能会稍微的大一些,那我们也可以呢,存储在这个数据库当中,这儿呢,都是纯文本性质的,那就是这样子的,然后下边呢,还有两个呢,叫做枚举类型和集合类型,那有的时候我们会看到呢,一些分类方式当中,把这哥俩呢,也都放到这个文本字符串类型里边了啊这也可以就是就是分类嘛,是吧?呃,我这块呢,更倾向于把它拿出来,因为从形式上,形式上来讲呢,还不太一样。
13:07
不太一样,那枚举类型的话呢,就是我们要多选一啊,就是举了好几个啊,从这里边挑一个,比如春夏秋冬你选一个是吧,那么这个集合类型的话呢,我们可以这个多个,里边呢选多个啊,就是你有什么爱好,这块一共列出来五个,你可以选其中的两个或三个,对吧?诶可以多个,里边呢又选多个的。这叫集合类型,那么这多个呢,每一个其实都是个字符串,所以说呢,有的你就看到把这俩呢,又都放到这个文本字符串这个类型里面了啊,这个大家能理解精神就可以,然后下边这个呢,叫二进制字符串类型,就是它把这个呢也称为呢是字符串了,那称称为字符串,那咱就统一的都这样叫吧,但实际上的话呢,这块呢,就是二进制的,它不是我们可读性的这种字符串了。那你比如说我们像这种lo类型,咱们可以去存储图片呀,哎,这个音乐呀,视频呢,是吧?哎,都是可以存储的,那这些文件呢,我们就可以使用这个二进制的这种类型去存储,你就不能用这个test,这是存文本的,你怎么能存二进制数据呢?是这意思吧,OK啊,就是存储二进制数据呢,用的这个啊,它对应的就像大家呢,学习其他编程语言里边涉及到比如说叫字节流是吧,来存储这种非文本的,然后这个呢,就相当于我们用的那种字符流来处理的这个文本数据,OK。
14:21
然后下边这块呢,叫做杰森,这个杰森的话呢,不知道大家之前有没有接触过,像前端的JS,包括呢,学习后端编程语言的话呢,也会这个涉及到这个杰森,因为我们会有是不是客户端跟这个服务器端它这个数据交换对吧?那交换的一种格式的话呢,就是这个杰森还是比较轻量级的啊,那那个杰森数据呢,我们也可以存储在咱们的数据库中的表里边,那具体体现呢,就是杰森对象和杰森数组。那个这个咱们再讲到这块呢,咱们再给大家去说啊,然后在下边呢,叫空间的数据类型啊,单值的集合的这块呢,呃,从完整性上来讲呢,我就列到这儿了,但是对于咱们大家来讲呢,这块肯定呃大部分的绝大部分的同学来讲,那这块呢,实际上是接触不到的,那除非你专门来跟做这种图模型的对吧,那涉及到地图的社交了等等的,我们才会接触这块多一些,OK,所以这块我们在讲的时候呢,也是做一个了解就可以了啊。
15:16
好了,那么下边的话呢,涉及到了我们在这个定义这些字段的类型的时候呢,可以使用的一些属性。啊,这样一些属性,那比如说我们像前面到这一块,实际上呢,我们都会放在下一章中,我们讲约束的时候呢,给大家去说,而且约束里边呢,不管这些。哎,不管这些,咱们到时候呢,再讲空啊非空啊,默认值啊,主键啊,这个主键是不是可以自增啊,这个我们到下一章当中去讲,那下边这两个呢,我们稍微提一下。哎,下边这两个,这两个的话,你会发现它叫做UN sand叫无符号,还有一个呢,叫character set啊,一个具体的字号指定一个字数集,那大家呢,这个呢,看着稍微的眼熟一点。是这意思吧,那这个是什么意思呢?这个按三的话呢,就是我们在声明主要呢,是针对这种数值类型的,那正常来讲呢,他们是有正的有负的,那一旦呢,你后边加了一个AN3的话呢,它就只能表示正数。
16:11
啊,因为我们有些场景呢,是用不着负数的,你比如说我们来表示这个,呃,比如说这个城市呢,人口啊,我们把每个人呢,放在一个数据中的表里边,然后呢,每个人的这个性的这个年龄的话呢,我们就用整形来表示了。那么这个时候的话,你想年龄的,最起码你刚出生的,那你交个一岁对吧,那你不可能说是有负数的情况,那我们呢,就可以用这个I sand呢来进行一个修饰。啊,这个好理解,那么下边这个呢,叫character set,指定一个字符集,那这个呢,我们稍微的多说两句,我就不具体的举那么详细的例子了,我这一说呢,大家能够能够去明白啊就可以了。哎,这样咱们先把这个这个章呢,咱们先给它创建出来,CTRL一下。那这块我们先来个井号啊,先这么着,然后CTRLS。
17:00
那先保存到我们这个笔记这里边啊,CTRLV一下OK。这个呢,我们是说这个,诶关于这个属性。那也关于属性这块呢,我们主要提到是谁呢?就是这个叫character。这个叫set,然后后边呢,我们指定具体的一个这个字符集,你看是什么啊,我就写个叫name吧。OK,能理解是吧,那么这个呃,设置字符集这个事儿的话呢,咱们其实前面呢讲到过,那我们在哪去提到过呢?呃,这块啊,我先写一下,咱们在创建数据库的时候呢,是不是可以指明字数集啊。创建数据库时。指名字符集,这个还记得吧,我们当时用的是不是叫create,一个叫。那database我们还写过叫if not exist,然后呢,后边呢,就写这个database的一个名字,比如我们叫test,诶正好咱们这一章呢,也是需要一个数据库,对吧,我叫DB test12吧,第12章,然后紧接着我们会有一个叫character,是不是叫set呀,那这块我们写的叫UTF8。
18:06
还记得吧,啊没有问题,好,那么此时呢,我们去选中,哎,执行。可以了,那此时的话呢,我们是不是就会创建一个对应的这个数据库啊DB test12没问题是吧,那么我们也可以呢,去叫show。Create。那叫data,然后呢,嗯,DB test12来,我们这时候呢,选中执行,那这时候呢,大家你会看到我们创建的这个呃,数据库这个语句当中,你看我们使用了它对应的这个字符集,是不是叫character set u tf8没问题是吧,就相当于呢,我们在创建这个数据库的时候呢,指明了这个字符集,那我们其实啊,在创建表和指明这个表字段的时候呢,还可以额外的再去指明它的字符集。哎,指明它字数集,你看这呢,就相当于是在创建表。的十号指明这个表的这个字符集。
19:00
咱们前面为什么没有去指明呢?因为没有必要了啊,因为没有必要了,比如我这块呢,诶我叫一个tap吧,这样一个数据库,我就不具体写里边这个特别详细的这个信息了啊,然后这块你比如来个ID呢,是个int类型是吧,我们在后边这块呢,实际上呢,也可以去指明它的一个character set。啊,Character set就是这么个意思,来我们这块呢,执行一下。好,大家你发现的是不是我们创建成功了,那你也可以呢,是不是叫show一下叫create。诶,我们这个,嗯,Table是吧,嗯,咱们叫这个tap。好,那么我们选中了做一个执行,大家也会发现呢,这块是不是也指明是这个UTF法没问题是吧?啊这是我们说的这个场景,然后的话呢,还这块多说一句,咱们说呢在创建。嗯,创建表这个指明字段时。表中的。字段十是吧,哎,可以指定这个字段的字符集。
20:00
哎,可以指定字段的字符集,比如我们这里边,你看我去create一个,哎,这个table,我们叫temp一行这里边,然后呢,我这呢写个ID啊,比如说是个in类型的,然后再来一个name,然后这呢是一个whatar类型。啊,这两个比如写成事五对吧,然后在这个位置的话呢,大家其实也可以呢,去加上一个叫character set,那指明它这个词数集,那这个意思是什么呢?就是我们这个字段的话呢,我们显示的指明它是用u tai8的,或者你也可以改成比如叫JBK是吧,哎,这样的一个意思啊,我改一下JBK。啊,改成它了是吧,来我们这时候呢,选中做一个执行。那此时的话呢,我们再去呃,CTRLC一下,我放到这个位置,这个我们叫TYPE1好选中了我们做个执行,那这个时候的话呢,大家你会发现呢,咱们针对name这个字段呢,你看它的这个字母集呢,是不是叫JBK了,哎,大家想必应该知道我们这个意思了,就是说呢,我们创建这个,呃,我我我这样来讲吧,咱们呢,创建好这个表之后呢,接下来咱们就可以往里边是不是添加这个数据了,那么关于这个内部字段呢,它是一个字符串类型的,那么它是使用什么字符集呢?你就看你声明的时候是什么了,那有同学说老师我以前没有声明过它,如果这个字段没有声明,那就按照你表声明时的字符集。
21:14
呃,同学老师以前咱不是也没写过吗?好,如果这个表没有声明的话呢,那就按你这个表所在的数据库的这个字符集,那就按照这儿了。哎,所以说呢,我们以前呢,光写了数据库,没有写表,也没有指明具体的字段,那么就。默认啊,我们这个表以及表中的这个字段呢,哎,都是向上的,哎,那就向上呢,就是按我们这个数据库的这个字符集来去实名,那还有同学说老师呢,我在创建这个数据库的时候呢,我这个数据库这我也没指明,那怎么着呢,那就再往上,再往上到哪了,就到咱们这个麦点ini这样一个配置文件中了。那就到这个配置文件里了,那配置文件里边你用的是什么字符集,那就是谁啊,那我们可以去查看用谁啊,咱们不是有一个叫show variables。
22:00
哎,这个variables是吧,哎,我们叫like,然后这呢,我们是叫哎character。哎,这个下划线,我们来个百分号,哎,是不是这样一个方式来,我们这时候选中做一个执行,这时候呢,大家实际上就能看出来,我们在这儿呢,是不是就有一个叫,诶这个character set database,相当于就是如果我们这个数据库呢,你没有去指明这个字符集的话呢,那就按照这个来了。就按照这个来了啊,那相应对应的话呢,我们这个呢,是不是还会受我们这个影响,就是整个服务器的这个字符集了,那就是这个意思,好,那我们到这个,呃,下篇的时候呢,咱们装Linux版的MYSQL的时候,到时候还会给大家去提一下同样的这个字符集的一个事儿啊,这块呢,我想必应该给大家呢就说清楚了。呃,想必说清楚了,那么大家呢,呃,实际的一个指导这个开发中呢,我们怎么去做呢?开发中的话呢,如果没有特殊情况呢,咱们通常呢,你在数据库造的时候呢,建议呢,你可以去加上它,哎它加上以后呢,里边再去造表的时候呢,就不用刻意的非得再去指明它的字数机了,因为咱们一般呢,用的都是诶U填八的。
23:04
啊,都是U8的。好,那么这样的话呢,咱们基本上把这个事儿呢,先说了一下,然后呢,接下来咱们呢,开始具体的讲解,具体的整形浮点型,定点数类型啊,这个日期时间类型啊,这些呢,我们就往下去穿,OK。
我来说两句