00:01
大家好,欢迎大家继续收看上硅谷的Linux云计算视频,我是刘超老师。那我们从本节课开始呢,我们来讲一下数据库方向的一些面试题,那我们首先呢,先来讲一下数据库里边的基础的一些SQL语法。那这个呢,也是我们作为运维方向,或者说服务器管理员方向面试的啊。关于数据库相对比较基础的,或者说这个比较多的一些面试的问题,OK。那首先呢,我们来看一个题目啊,看一个题目。我这个地方呢,有一个库表库呢叫student。然后表report。然后呢,其中呢,有三个字段啊,分别是我们的这个姓名啊,对应的学科和成绩啊。Subject。Salute。并且里边呢,有相应的一些记录信息,那要求呢,根据下边的这个要求来写出对应的SQ语法啊,SQL语句,OK,比如说第一个要求,请查询姓李的同学的。
01:07
个数,比如说统计我们这个表格当中姓李的人数有几个人。第二个查询表中数学成绩大于80的前两名同学的名字。并且按照分数从大到小的顺序排序,OK,注意啊,这两个题目呢,实际上按照我们这个正常的这个授课啊,它其实稍微已经有点超纲了,原因很简单,作为运营工程师而言,我们所针对的数据库的方向主要还是以集群优化和集群部署相关的。对于SQ语句呢,我们只需要了解相对比较简单的增删改、查授权等等就可以了。那相对比较复杂的数据结构的设计和我们是关系不大的,但是呢,这两个题超纲不严重,我们可以给大家讲一下,那首先啊,我们先不解答两个题目的答案,我们先把我们的思考语句进行一下复习,OK。
02:08
那大家都知道SQ语句呢,这个方面非常多,那我们的搜狗语句大致分为增删改、查授权,以及我们数据库服务器的这个启动和关闭,那这个地方呢,我们是以MYSQL为案例来进行这样的一个讲解啊,来进行这样一个讲解。OK,首先我们来看一下SQ语句相关的增的命令,那以MYSQL为例的话,我们想创建一个用户,可以使用create命令来进行创建,那在创建用户的时候呢,其实可以直接create user某一个用户,不给他设置密码。但是呢,也可以在创建用户的时候直接设置密码,那完整的指令呢,是这样的。Create user。然后呢,指定你要创建的用户名是谁。艾特后边会有一个什么呢?会一个符号,艾特后边这个符号所指代的是什么呢?指代的是该用户用来连接数据库的方式。
03:09
该用户。用来连接我们数据库的方式,那连接数据库方式我们分为两种,第一种就是本地登录,也就是说服数据库装在哪个操作系统上,我们在这个操作系统直接登录,这是本地登录。第二种叫做远程登录啊,远程登录,那远程登录呢,又分为具体指定某个远程登录地址以及。广泛性的就是就是泛指啊,泛指那对应的这个百分号,实际上指的就是任意的远程地址啊,任意的远程地址,也就是说张三这个用户啊,可以从任意远程地址来登录到我们这个服务器上。比如说那如果说我想创建一个只允许本地登录的,不允许远程登录呢,那这个地方你可以换成local host。Localhost。OK,那再一个就是identified啊,然后呢,这个语句后边写的是我们该用户的密码。
04:10
该用户的密码,OK,注意这里边儿有几个地方需要用单引号。第一个是关于。我们登录来源地址是哪,第二个是关于密码这个位置啊。一定要注意,以及我们的SQL语句的结尾都要有分号结尾,OK。第二个呢,是关于创建对应的数据库。创建数据库对我们来说非常简单,只需要create database就可以了,然后呢,后边写一个对应的数据库的名字。那再来说创建数据表。创建数据表要比创建库稍微麻烦一点,原因是库的作用是来存放表的。库就是一个仓库,而表格才是用来存放数据的。那。表格既然是用来存放数据的,他就得有一个表格存数据的存储规范,怎么规范,就得需要把表格规划好。
05:01
有几列,哎,每一列是放什么类型信息的,那至于有几行呢?取决于这个用户往表内插多少条了,所以说行数我们没法定义,但是这个表格的列数。我们称之叫字段数,我们是可以啊,事先定义好的,那在我们创建数据库表的时候,我们就可以直接创,在创建表之前规定我们有几个字段,然后。规定我们有几个字段,比如说这个地方呢。我们在举例子的时候,创建了一个叫ae的表格table保A1,这个表格当中呢有两个字段,一个叫ID的字段,一个叫name的字段,其实就是两列。只不过呢,除了要声明我们对应这个列的名称,也就是字段的名称之外。才要对字段的类型做一个修改和约束。比如说我要求这个ID字段下边只允许写整数。啊,只允许是整数,不允许写整数以外的其他字串。
06:01
那同样我要求这个name这个字段下,在写的时候,字符串的长度不能超过30。字符串的长度不能超过30,用的是这种。叉30的这种字符串的类型的限制。这是我们的这个创建数据表,这个地方呢,提到了一个插入数据的,这个呢,其实应该算增删改查当中的增,那个改当然也可以理解为是新增啊。什么用的是insert命令insert into into的目标地址是哪一个表到A2这个表,然后呢,要先说明你要往这个表的哪些字段进行插入。这个地方为什么要这样说明呢?因为有些时候我们一个表当中啊,可能不止三个字段,可能有四个,五个,六个,七个,甚至十几个,那如果你只是相望这个表当中某一部分字段里添加,那你就声明往这个表的哪些字段里添加,以及后边values指的是添加哪些值,以及最后的结尾。
07:05
那大家需要注意的就是,我们这个地方是什么呢?是一组一组的信息,那就是insert into要插入信息了,往哪个表的哪些字段里添加,以及往该字段里添加哪些值。这个地方说明了三个字段,ID name和age,而我们的值也有三个。IDV1NAME为张三,而值为21,注意这个地方,我们在这个数据库values这个位置插入相关的这种呃字符串类的内容时,尽量的使用单引号把它引起来,否则可能会命令失败。下命令失败,一定要记得这个地方。那增的命令看完了,我们来看一下数据库相关的删的命令啊,删的命令增呢。我们用到了好几个create。Create insert那我们来看一下山的,山的命令呢?
08:01
用到了drop命令啊,Drop命令我们可以用drop user的方式,我们可以用drop user的方式来删掉指定的。库,比如说呃,用户名,比如说我们删掉了这个叫艾特硅谷的用户,而且呢,删除的时候一定要实名,是以什么方式登录的这个。什么意思呢?就是我们在创建用户的时候,我们可以创建两个相同的用户名,但是两个相同用户名对应的可能登录方式不一样,这个艾特硅谷呢,对应的使用的是远程登录,另外一个艾特硅谷呢,用的可能是local house本地登录,那这两个就其实就是不是同一个用户了,那也就是说在数据库当中允许出现相同名称的用户名。但是相同名称的用户名对应的还要有这个用户对应后续的登录方式,在我们进行创建和删除时,都要指定用户以及用户的登录方式才算一个完整的命令。OK,这是大家需要注意的一个地方。
09:00
那其次呢,就是关于用户删除我们的数据库的时候了,这条命令我教了你们,但是一定不要没事去尝试它,尤其是不要在线上服务器搞这个事儿。尤其是不要在线上服务器搞这个事儿。即便是在线上服务器搞这个事儿,也一定要记得停止服务再搞这个事儿,即便是停止了服务去搞这个事情,也一定要记得提前备份好再搞这个事情,OK。我维尔这个命令说了很多遍,我是怕什么呢?我是怕我把这个命令教会你之后呀,你去工作了,顺手就给人家把数据库一删,完事,那我告诉你。一个是你删完数据库。很有可能对吧,这个公司他数据就丢了,这个责任就落在你身上了,指不定就公司给你开除了,或者要罚你钱咋咋地。甚至啊,更严重了,如果涉及到一些这种恶意的破坏的问题,比如说你去公司,你是报复这个公司的,你给人家删了,说不定人家公司会报警给你逮起来,这个事一定要注意啊,Drop命令。
10:07
执行的时候一定要谨慎,谨慎再谨慎,OK好了。这是我们的drop命令,Drop database加库名就可以了,同样删表也是drop表表名就可以了。好了,这是两个删除动作,记得啊,再说一遍,这两个一定要切记谨慎执行啊,一定要切记谨慎执行。那其次就是删除数据了,那刚才我们在上边那个增的过程中啊,看到了一个插入数据了,那这个地方我们怎么删除数据呢?删除数据用的是delete啊,是delete delete from从哪删呢?从A2里边这个表里边删那。如果你写到这个地方结束,那是不可以的,为什么呢?很简单,你没有指定删谁,我这个表里边有很多条,需要你来告诉他一个条件,那there就是。声明条件的一个这样一个命令,V条件,什么条件啊,删除那个ID等于五的那一行。
11:06
删除那个ID等于五的那一行,那这就是提供情验,也就是说删除从哪删下,从A2删怎么删啊,删除ID是五的那行,那这个还是比较简单的一条,那MU比较复杂一条,比如说。你们条件更复杂的时候是可以可以是这样的,Delete from a2,删除A2表中的一些数据,什么数据啊,条件是age between23and25。什么意思呀,就是年龄在23~25之间的。年龄在23~25之间的啊。BETWEEN23AND25,就是二十三二十五之间的删除年龄符合二十三二十五范围之内的这些用户,所有用户,这个就是删除很多了啊,很多了,OK,这个呢,就是我们的增删当中的删的一些命令。我们再来看改啊,再来看改。改呢?所要改的对象其实很多,所以说命令也变了很多,比如说我们要修改数据表中的什么数据,那我们可以用update命令update a2表更新,A2表更新什么呀。
12:13
设置它的年龄为21。设置,也就是说修改对象就是年龄是21,但是我说了年龄是一个字段,它下面有很多个谁谁的年龄,你要告诉他条件什么条件就是谁的年龄改成21,那where ID等于三,修改这个年,这个ID号为三的这个人的。这个这这个年龄为21岁,那这就是更新数据啊,更新数据。再一个就是修改数据表的名称,就是修改表名,可以用alter。来声明。或者说修改A2这个表,给它rename成A1就可以了,用rename这个关键词重新改名的意思,OK。那其次呢,是来修改数据表的字段结构。
13:04
啊,字段结构就字段类型大家都知道,我们刚才在创建这个表的时候,我们可以说ID必须用int类型,哎,我们的这个name可以用叉30类型,那实际上呀,这些已经设置好了的类型我们是可以修改的,在修改之前我们可以先用describe来查看表,以及对应的表的字段结构和字段类型。那查完之后呢,我们可以用alter table a1的方式是注意改名用的是rename,而改变字段类型用的是modify。Modify,然后呢,改变的是name这个字段。改变的是A1表当中的name这个字段改变它的字段改变了什么呢?把它的字段类型改成了叉50,一开始叉40,现在差不多变为叉50了。这个al table a1指的就是改哪个表的哪个字段,以及改这个字段的什么呀,不是改这个字段的名称,而是改这个字段的什么呢?改。
14:08
十个字段的类型。然后改完之后,记得拿describe去查看一下表结构信息,就会发现我们对应的这个呃表的相关的字段类型就做了对应的一个修改。好,这是我们SQL语句当中呢,改的一些操作,那再来看一下这个另外几个。修改数据表中的字段类型,刚才说了啊,刚才说了,那除了修改字段类型之外呢,还可以增加一些别的一些功能,比如说我们可以用al table a1啊,我们可以用table a1。然后呢,Change,注意刚才有rename,刚才有什么呢?Modify现在又增加了一个rename,这个rename呀。指的是既可以修改字段类型,又可以修改字段名称以及其他类型的,也就是说change你可以理解为是rename和modify的一个结合体。那趁什么呢?首先是把name字段改为了。
15:10
Username。这是字段名称的改变,其次呢,是改变了我们的什么字段类型,再其次增加了几个其他功能,比如说呃,Not诺啊,Not诺就是指的是不能为空啊,不能为空,然后呢,默认是一个空格啊,默认是一个空格。然后可以用来查看一下,所以说change呢,就相当于是我们的那个,呃。呃,对应的rename和modify的一个结合体,Modify的一个结合体,好了,这就是我们的另外一个概念再说。添加删除字段。啊,添加删除字段,添加字段和删除字段也是在原字段的基础上进行操作,所以说这个命令并不属于增和删,而属于修改,而属于修改,那比如说我们这个A1这个表当中,我想增加一个新的字段。
16:02
这个新的资源叫time,那我就可以用al table ae a来进行增加。A来增长。增加字段叫time,然后后边声明字段的类型叫daytime,就是时间格式啊时间格式。那如果要删除,就是al ae drop drop。这里边儿的命令啊,有些名,有些命,命令的名字很相似,千万不要搞混了,比如说我们的这个。呃,比如说我们的这个,呃,添加删除是create和drop。啊,还有这个insert,呃和delete,那这个地方又新增了alter alter后边有什么?有rename modify change ADD和drop这几个,一定要把对应的组合。记清楚,否则这个指令记不清楚的话,你是没法对数据库的数据进行一个操作和修改的,OK,那这是我们的改的命令,那我们再来说查,那在这块查。
17:03
查的话有列出数据库,列出数据表,查看表结构,以及查看指定表内的什么类型的数据的,OK,比如说我们看一下show databases和show tables,就是来查看对应数据库和数据表有哪一些的。那对应的这个describe a1这个呢?其实刚才我们已经看到过了,它的作用是来查看指定表的表结构以及字段类型的,字段类型的OK。再一个就是关于查看指令。数据库内某表里边指定符合条件的内容的,比如说我们查看MYSQL用户密码及相关的登录方式,我们可以用select来查询。然后呢,后面要说明你要查的内容是什么。我要查这三个内容。不同的内容,比如说不同的字段,可以用逗号分格,我查三个字段,一个叫user字段,一个叫password字段,一个叫host字段。
18:02
那查这三个字段从哪查from,从这个叫my circle库的。User的表当中来查询。声明查询查什么?从哪查?OK就可以查询到了,那就可以查询到了,当然如果你觉得查询条件不太,呃,这个符合电压的话,就是还需要更详细的话,可以用where。可以用where等等,OK。好了,这就是我们的查询,再来说授权,授权呢是一个MYSQ当中非常重要的,也是一个非常危险的一个一个操作指令啊,也是一个非常危险的操作指令。比如说。看我们的第一条指令。Grant all。All指的是所有权限。所有权限。然后呢,将这个所有权限授权到哪一个库和哪一个表上,诶啊,在这个叫AA库的ae表上授权所有权限。授权AA库A1表有所有权,谁呢?还要有一个行动者,也就说还要有一个人能够有这个权限,那to授权给这个叫艾特硅谷的用户。
19:12
并且我说了,但凡是指定用户,一定得指定这个用户对应的登录类型那。我们授权给的对象,我们授权给的对象是以远程方式登录的这个叫艾特硅谷的用户。授权给他什么呢?授权给他所有权限,那让这个用户有所有权限,对谁管理呢?对AA库的ae表进行管理。这就是对应的授权,但是呢,大家一定要注意生产环境中的授权,一定要记得尽量不要授权奥,因为奥。权限太大了。权限太大了,OK。上面这个授权指的是给已经存在了的用户授权,而下边儿这个授权指的是给没有存在的,就是不存在的用户,就是创建用户,并且给这个用户授权,其实呢。
20:09
下边这条指令其实就是创建用户和授权的一个结合体啊。OK,那前边还是正儿八经的授权,一直到这个地方,只不过后边增加了一个关于创建用户时给用户设置密码的一个指令,就是identified。然后BY密码这个地方。所以说这个创建用户并授权其,呃对某某库的。某某表有什么权限,这个操作其实也非常简单啊,其实也非常简单。OK,那这是对应的授权,既然有授权,那就有取消授权。授权呢,使用的指令叫grant,而取消授权用的是revo。那我们取消数据的方式是这样的,比如说。我们可以revoke掉drop delete等权限,这两个是相对比较危险的权限。OK,那。
21:05
Drop掉的是谁的权限呢?是以远程方式登录的,这个叫ABC用户的权限,那删除的是这个用户对哪些库和表的权限呢?删除的是ABC这个远程用户对于A库和ae表的删除的权限。所以说这个格式还是一样的,只不过呢,这个是grant给谁。吐给谁,在什么上边吐给谁,而下边这个是。取消掉。从哪里来的用户的?上边的什么的一个。什么权限啊?下面的一个什么选项。所以说对应的授权和取消授权啊,都是我们。生态环境中常见的而且是很重要的两个指令,大家一定要记得把这两个指令记清楚,而且在执行时一定要谨慎一些,要谨慎一些。你就可以这样理解这些命令啊,就类似于那些删除命令,一定要谨慎执行,OK。
22:03
那再一个就是关于呃,查看这个授权之后的信息了,比如我们可以用受grants for ABC用户。以远程方式登录的APC用户的信息以及受然后。查看两个用户的这个授权信息就可以了。好了,接着我们来看一下关于数据库的启动关闭,那启动关闭呢,可以用这些命令啊,Service my d start service my d stop,这个呢,一般指的是我们使用。偏包安装的,可以这样来操作,同样ETC的TDT的这个mysq d start和etct mysq d stop这个也是可以使用。R片包安装的方式来进行操作的,那下边这两个指的是一般情况下,我们如果呃数据库呃是用源码包安装的,可以这样来启动,比如说我们可以使用一个叫MYSQLD-safe的命令加上后。
23:00
And符让这个指令在后台运行,那就是启动起了我们的my circle的这个进程。那如果想关闭,我们可以执行my me。管理员命令my me-u root,杠P密码杀down,那shut down shut down指的就是对对应进程进行一个关闭,啊,对应进行一个关闭,那这个呢,就是我们这个对应的数据库的一个启动和关闭的指令。那接下来呢,我们来看一个这个。就是面试题的一个答案,那面试题的答案,我一开始在讲面试题时候,我说过啊,说这面试题的两个要求呢,稍微的超纲,所谓的超纲呢,是我们有两个函数没有给大家讲啊,没有给大家讲,那这个地方我给大家说一下。首先呢,第一个的答案是这样的,我们先回顾一下这个对应的题目吧。题目要求是这样的。题目的要求是。在这个表里边儿查出姓李的同学的个数。
24:01
OK,那我们来看一下啊。一个两个三个。有三个心理的个数,那这个地方呢,我们用什么样的函数来操作呢?是这样的一个函数。这个函数呢,叫。这个函数呢叫count函数,那对应这个count函数的作用呢?很简单,这个函数指的是返回匹配指定条件的。返回指定匹配条件的行数。符合匹配条件的行数不就是做统计嘛,啊,不就做统计嘛,所以这个东西你会发现它和我们之前的WC-L很相似啊,OK,那至于什么样条件呢?就利用where来设置了,Where条件指的是在name这一列或者说叫字段中来匹配以里开头的,Like里百分号就是匹配一里开头的。
25:11
凡是符合以里开头的行,做一个使用count函数的统计,那统计出来之后就是三行。这就是count函数的一个匹配方式啊,匹配方式,那再来看一下题目的第二个要求啊,再来看下题目的第二个要求。题目的第二个要求呢,是指的是查询表中数学成绩大于80的前两名同学,并且呢。还要按照分数从大到小进行排列,其实啊,应该是这样的,先对所有的这种。数据进行排序,先排序,先把所有的这个成绩进行排序,排完序之后呢,再取大于80的,然后再取大于80里边的前两名,那么可以用肉眼来看一下啊。他肯定是第一了啊,98嘛,95的是第二。
26:03
然后再说80级的,有个85是第三,有个83是第四,有个79是第五。有个74是第六,那排序的话,我们就是98 95 85 83,那大于80的有四个人。排完序之后肯定是谁啊,肯定是这个白居易和我们对应的这个李白在前边,那也就是说最终我们会取得这两个人的,那我们用到了什么样的函数呢?我们给大家看一下。OK,那这个地方呢,首先呢,我们要先来进行排序,然后再来进行什么呢,再来进行这个。就是从大到小,或者从小到大的一个这种。使用升序和降序,就是排序和升序,降序是使用两个不同工具的,那排序的方式是order by,而DEC指的就是用什么?降序的办法,所以降序就是从大到小,大的在上面,小的在下面啊,小在下面,那通过order by和dic对我们这个什么成绩这个字段进行排序和降序,就是降序排序。
27:15
那降序排序完成之后呢,我们需要取前两名,那就用limited啊,用limit limit2就是取前两行,那就可以取到我们的两个用户的信息了啊,两个用户的信息了,那这也就是我们对应的这两个题的答案啊。对应的这就是我们两个题的答案,那再给大家说一下。数据库这个东西呢,对于我们运营工程师而言,它是一个非常重要的一个技能,我们掌握它呢,主要掌握的方向还是在集群方面啊,以及它的一些中间件的一些部署方面,那我们对于数据库的这些什么,呃,它的这种语法结构呀,数据结构呀,我们呢,对它呢不是特别这个倾向,原因很简单。
28:02
所有的数据库里的数据的数据结构、存储结构、库表结构等等,这些东西都是需要开发工程师切合他们的开发项目的。也就是说他们里边要创建多少个库,每个库里有多少个表,每个表什么字段啊等等这些信息都是要由他们开发的时候和开发的项目去结合进行来设计和合操作的,那我们能做到的就是为他们提供一个良好的安全稳定的一个运行环境,以及帮他们部署好对应他们所需要的一个这样的一个数据库环境就可以了。所以说我们的责任并不是。像这个考察的题目当中这样需要对数据库里边的每一条命令都非常了解等等这样的,并并不需要这样,但是呢。我们呢,以后的工作方向是有很大的一个分支和提升的,比如说我们目前是什么运维工程师,或者是什么这个我们的这种管理员啊,这种系统管理员,但以后我们的发展方向非常多,我们可以以呃云方向发展,可以向数据库方向发展,我们可以向自动化方向发展等等,没有很多方向,所以说如果你的以后的发展方向是数据库的话,那可能你就要对数据库的一些指令啊,命令啊,函数啊等等,数据结构啊等等,包括一些除了MYSQL以外的其他的数据库。
29:27
都要做一些了解和熟悉,甚至某些部分都要做到精通,然后呢,以此来完成一个从这种普通的运营工程师过渡到数据库管理员或数据库工程师的这么一个过渡阶段。那个时候可能你对数据库的一个了解和掌握,就不单单停留在数据库架构和数据库中间件上的维护。和这种。搭建部署的这样一个层次了,可能就到了另外一个关于数据库内部环境操作和维护的一个环境了。
30:03
这样呢,就是我给大家提供的一个建议啊,那这就是我们本节课的一个数据库语法的一个讲解,那我们本节课就到这儿,我们下节课再见。
我来说两句