00:00
接着啊,咱们来看一下这个叫更新数据,更新数据呢,顾名思义就是呢,对这个表当中已经存在的这个数据呢,我们做一个修改,比如呢,像我们这个图当中呢,这是60号部门,我们把它呢改成这个30号部门,对吧?哎,就这个意思,就是更新这个表中的这个数据的意思了,行,那如何去更新呢?这里边儿呢,提到了一个指令呢,叫做update,然后set是吧,这样的一个情况,好,这块我们回过来呢,做一个说明井号,那我们来一个二。那前面呢,我们这个第一个呢,主要指的是这个叫添加数据了啊,第二呢,叫做这个更新数据,或者呢,大家也可以理解成呢,叫做修改数据啊都可以。好,那么如何去操作呢?这里边儿呢,我们需要用到的这个指令呢,是什么呢?叫做update,然后点点点,然后呢叫set,哎,点点点,然后后边呢,通常咱们都会有一个过滤的条件。为什么通常有过滤条件呢?来我这块呢,直接来写一个语句呢,大家你就知道这个意思了,比如说呢,我们现在呢,是针对于咱们这个empe这个表中的数据,嗯,像这个张俊杰吧,这个张俊杰呢,他的her date呢,这个没有写,那下边呢,我们把这个her呢给他填上,这不就相当于是一个修改嘛,那我们怎么做呢?这个呢叫update,那E相当于这块呢,就这个表名,然后set这块呢,就是你要修改的这个字段是什么,我们希望呢,把这个hair呢给它附一个值,这个值呢,比如我们就用现在这个当前的这个时间,那我就用这个科date来表示的。
01:28
这个date呢,只有本身这个类型呢,叫date只有年月日,那我们就用科date好,然后的话呢,大家你想如果我们没有where的话呢,相当于我们现在来选中就去执行,会报错吗。不会。但是的话呢,他是不是会把我们这个表中的所有的这个每一行的数据的hardit都改成当前的这个日期了呀。那就不对了,就像咱们写一个查询一样,查询里边如果要没有where的话呢,是不是这个表中的所有数据就都查到了,就这样个道理,所以咱们说呀,一般的话都会有一个where的,我们V什么呢?这个ID等于五,咱们只需要修改的是ID等于五的这样一条记录,所以这个大家一定要小心一点啊,不要丢了。
02:11
改完以后的话呢,我们再去做一个这个select,我写到下边吧,Select清from一下这个那E。好,那我们这块呢,去选中执行,那这块呢,就填上这个时间了,当前这个时间对吧,没问题,行,那这块呢,我们就给大家强调一下,这个where呢,一般呢,咱们再去这个修改这个表中数据的话呢,都会有这个where的存在的,如果要没有where呢,它就实现了一个叫批量的一个修改,对吧?所以这块呢,我们说一下这个update,它叫更新数据,是可以实现这个批量这个修改数据的。啊,就是我们说的这样的一个意思,像咱们前面讲这个inser的话呢,那默认情况下呢,其实它就是一条一条的去加数据了,对吧,那我们这里边儿这个update的话呢,它天然的就可以实现批量的数据的一个修改。那我们到底要改哪些数据呢?大家主要你就看这个where呢就可以了,行这呢我们是说的这个意思,然后呢,接下来我们再去修改写一个例子吧,像我们刚才这个例子当中,咱们只改了这一条数据的一个字段,那比如说像我们这个继我想把它的her data改一下,同时呢,把这个salary呢也改一下啊,我们看这个该怎么做呢?就相当于是哎,同时修改。
03:21
那一条。这个数据的是不是多个字段。对吧,好,这个呢,我们怎么做呢?Update一下还是这个PE,然后呢,Set一下,咱们现在要修改的是这个higher,那这块呢,比如我们也是改成这个当前的这个日期吧,那就这样写,后边这块呢,用的是一个逗号,哎,逗号,然后这个30等于这呢是5000,那我们想给它改成是这个哎,6000。那就这样来处理,然后where一下这个ID呢,等于四是吧,我这呢通过ID呢去定位呢,这个继母这个人好,我们选中之后呢,再做一个这个执行。就可以了,然后这时候我们做一个select。没问题是吧,就可以了,好,那包括下边这块,你你想改的话呢,比如说把这个姓名当中包含这个A的这个工资呢,提升20%是吧,这个呢都可以的,就就看咱们怎么去写这个外二条件了,前面咱们讲查询的时候呢,关于外里边填写一些运算符啊,咱们讲的也都挺多的了,在这呢,都可以去使用的,没问题的,那这块呢,我们相当于是做一个这个题目,说这个将这个表中姓名中包含。
04:28
包含这个字符A的是吧,这个题心。提薪这个20%。那就这样一个思路,好怎么去做呢?我们就update一下em,然后set一下它的这个salary等于原有的这个salary呢,是不是乘以一个1.2就可以了,然后where什么呢?Where呢?这个我们叫name,这个字段呢,叫like了,包含字符A,是不是就这样来处理就可以了?行,那这块呢,我们选中呢,做一个执行。啊,三行受到影响啊,那就这块呢,有三个数据呢,里边是包含字符A的啊,这块你可以自己有兴趣的,你就数一下就完了,行,那这样的话呢,我们关于这个修改操作呢,其实也就说完了,比较简单,就是这样一个操作,你要是能记住这个操作呢,你就会去写,那记不住呢,那就忘了。
05:14
啊,那不会写,跟我们上一章呢,讲的这个创建和管理表呢类似啊,就是相对来说这个比较简单一些,需要格外提醒大家的就是这个where呢,千万不要丢了,哎,千万不要丢了啊。好,这呢是我们说的这个叫update的这样一个操作啊,那这块呢,想给大家强调一点什么问题呢,接下来就是咱们在修改这个表中数据的时候呢,它是有可能修改不成功的。它是有可能修改不成功的,那我这块呢,我写一个例子,比如说你看我去update一下咱们这个employees。是不是这个叫员工表是吧,然后我set一下叫做department ID,等于我写成个1万。咱们知道呢,部门表里边是没有这个部门的,对吧,然后呢,我来一个where吧。
06:01
Where呢,这个employee ID等于呃,咱们有一这个这个人是有的,10102这个人是有的,我把102这个人的这个部门呢改成1万后门。1万号部门按说呢没有问题,但是呢,咱们执行一下,大家你会发现呢,是不是此时会有这个叫错误代码啊。但只不过呢,大家你现在看这个呢,你好像看不太懂,说呢这个不能够添加或者修改一个child的肉,说一个外键的约束失败了,这个是什么意思啊,咱们想给大家强调的点呢,就是修改数据时是可能存在不成功的情况的。情况的,呃,这个原因是什么呢?原因当然这个多种多样了,只要你写的语法不对呢,甚至也都会报错的是吧?啊这个原因的话呢,我们说是有可能由于约束的影响导致呢,我们这个添加不成功。啊,这我这写一个可能是由于。这个约束的影响造成的。
07:03
嗯,这个呢,我们讲到后边的时候呢,诶就是讲到约束这一章的时候呢,咱们会给大家去提,诶会给大家提,就是这块有可能大家呢,你就去改这个员工表了,发现诶怎么改还不让改呢,这个呢是由于约束造成的,包括咱们上边讲的这个添加数据呢,实际上的话呢,也是有可能出现的,比如我们把这个员工表里边去添加一条数据,我说呀,也是有可能添加不成功的,也是由于约束造成的,这个呢,咱们大家先知道这么个事儿就可以了,咱们讲到约束的时候呢,我一说你就能明白了。哎,你就能明白了,OK。相当于是啥啥情况呢,我简单的解释一下,就是咱们这个员工呢,每个人都有一个部门,然后部门呢,是不在我们部门表里边都有所刻画,咱们加了一个约束,这个约束呢,就要求呢,这个员工呢,你这个部门呢,都必须得是我们部门表里边有的这个部门。你想我们要添这个修改一个部门,让他改成1万,是不是在这个部门外里边根本不存在1万呀,所以他就报错了,上面添加也是也是一样,你添加一个数据呢,让他的部门是1万,那当然也不行了呀,因为我们部门表里边根本就没有这条记录。
08:06
哎,这就是约束造成的。啊,约束造成的好,那么关于这个叫修改或者要更新数据呢,咱们就说到这儿,那接着呢,咱们说一下第三个是不是叫删除数据啊。哎,删除数据呢,咱们在讲上一章tnket table的时候呢,其实给大家呢,已经涉及到过了,是不是咱们用的这个指令呢,叫做delete from是吧,然后后边紧接着的话呢,注意一般呢也是会有一个where的。如果要没有呢,没有不就是咱们上一章中讲到的,你是不是把这个表中的所有数据就就全给删掉了呀。是这意思吧,好,那这块呢,我们也是先做一个select查看一下,这呢是咱们现有表中的数据,那这时候呢,我们去做一个delete啊from。然后呢,五什么呢,那就看你这个条件怎么写了,这个条件呢,你要是定位,比如说ID等于一,那我们就把这个Tom给干掉了,ID大于一,那是不是就把一下边这个数据呢,就全给干掉了。
09:03
哎,就是这样一个道理,哎,我们这块呢,先做一个执行。那我们再去做一个查询。好,这时候大家你看我们第一条这个ID等于一的这样一条记录呢,就被我们给删除了。啊,这呢,就是我们说的这个删除操作啊,这个相对来说比较简单,那么接着问大家一句说呢,诶有没有可能我们删除也是失败的呀。哎,我们说呢,由于约束的影响呢,也是有可能出现的,举个例子,比如说我delete from一下咱们的叫departments这个表是吧,说我想删谁呢?说where咱的department ID等于50。我就想删除五杀部门来,我们选中去执行一执行,大家有发现呢,是不是仍然报错了,说不能够删除或者修改一个叫parent role,说有一个外界约束呢,失败了,哎这个呢,诶其实跟我们刚才讲解释上面那个诶。这个insert或者是update呢,失败是一个道理。大家你想我们现在呢,要求是这个员工呢,他这个所在的部门呢,必须得是我们这个部门标里边出现过的部门,那我们显然知道呢,有很多员工呢,是50号部门的,那我们这儿呢,也确实存在50号部门,对吧?那如果说呢,我们要是把部门表里边50号部门给删掉的话呢,是不是就意味着你这个员工表里就出现了一些员工所在部门呢,在部门表里边是没有的。
10:21
那不就还是不满足吗?这就是约束控制的是吧,它就不允许你去删除啊,所以这个操作呢,我们说,呃,在删除数据时。哎,删除这个数据时是吧,也有可能因为约束的影响。哎,这个导致呢,删除失败。来删除失败,哎这块呢,大家关注一下这样的一个问题就行啊,那再一个问题呢,就是我们刚才跟讲这个update一样,大家呢,在删除数据的时候呢,通常记着啊,我们需要呢去写一个where的,否则呢就全删了,那一说到这个全删的话呢,咱们这块呢,就可以再写一个整体的一个比较小结什么呀,咱们现在讲的这一章是不是都是叫DML的操作呀。
11:09
哎,我们说一下这个DML操作呢,默认情况下呢。情况下,这个执行完以后。哎,都会呢,是不是叫自动提交数据啊。是这样子的是吧,那如果呢,你要希望呢,他执行完以后呢,不去提交数据啊,如果希望执行完以后不自动。提交数据。哎,则是我们说需要,呃,使用咱们前面讲到的叫set叫auto啊commit是不是等于一下这个force就可以了。啊,这个呢,咱们在讲上一章的这个窗ET table的时候呢,明确的说过这样一个问题啊,这个执行完以后的话呢,我们如果说做了一个删除啦,做一个update呀,咱们是可以考虑roll back回滚的啊这块呢,我就不再去演示这个问题了。OK,那这关于我们说这个叫呃增删改啊,这个操作呢,咱们就讲到这儿啊,这个从实际开发制角度来讲的话呢,咱们说的这个DMR的话呢,相较于这个DDL,相较于这个DCL,这个DMR呢,使用的是很频繁的。
12:16
大家想象一下,就是比如说呢,呃,大家用这个京东啊,现在双11快到了,是不是这个购物车呢,现在你更新的就比较频繁一些啊,这个购物车的话呢,每个人相当于对应的都是一张表,就是你购物车的这张表。你现在的话呢,这张表在你一开始注册京东的时候呢,你第一次把呃商品放到购物车的时候呢,这张表呢就创建了,那么在你使用的这几年的期间当中,这个表呢,是不是始终呢,就还是你当初造的那张表啊,也没有做过一个大的变动是吧?但是呢,你今天买个东西放到这里边儿了,然后呢,一发现这个东西呢挺好,我就把它的数量啊再加加,那相当于你此时呢,是不是就修改这个表中你要买的那个数量了,对吧?然后呢,诶明天呢,觉得这个东西不好,我就从购物车里边移出来了,相当于是不是删除了一条数据,然后呢,这个马上双11的啊,又是一顿添加,是不是相当于就是引事的一个行为啊。
13:07
对吧,所所以呢,从使用的频率上来讲的话呢,相较于DDL和DCL来说,我们DM呢,使用的是非常之频繁的,那么DMR呢,咱们说叫增删改查把这个查询呢,咱也包里边这四个呢,去比较的话呢,是不是查询用的频率又是最高的呀。相当于咱们天天呢,其实呃,多数情况下,比如你看新闻也好,看这个抖音也好,包括我们查询查询这个呃,购物车的数据也好,还是说呢,你查看一下这个商品信息也好,其实我们每天做的多数的情况下呢,都是在做这个查询增删改呢,使用的频率加一起也赶不上查询的这个频率高,所以呢,我们针对查询的优化呢,是不是非常必要的呀。OK啊,行,那么关于这样的一个小结呢,我们就说到这儿。好,那关于我们说的DML操作当中的增删改,那咱们就介绍到这儿了,那接下来的话呢,大家看一下我这个课件啊,这个课件里边呢,我们记录了一个叫MYSQL8的新特性。
14:06
这个性特性呢,叫做计算列,那什么是计算列呢?哎,咱们看一下。说简单来说呀,就是某一列的这个值是通过别的列呢计算得来的。哎,然后我们把这个列呢,我们就称为呢叫计算列,那举个例子,比如说呢,我们这个表中呢,有三个列。分别对应的叫做A列,B列和C列,正常来讲的话呢,我们这三个列的值呢,都需要我们自己呢去赋值,你要没有负呢,那它就是一个no,是这意思吧?好,下边的话呢,我们有一行数据,那这一行数据当中,A列的这个值呢是一,B列的的值呢是二,C列的话呢,我们在声明这个列的时候,指明说它的这个值是A加B的一个结果。那么这样的话呢,我们不用指定C这个列的值的情况下呢,它自动的这个值呢,就是三啊,因为呢,我们已经有了H1B2了,那我们把这个C列呢,就称为呢,叫做计算列。哎,它是通过我们这个A列和B列呢计算得来的。
15:02
啊,计算得来的是吧,这呢是咱们扎巴的一个新特性,那有同学会想说,诶,这新特性也没什么了不起的,有啥用呢?那我们先给大家去这个说一下它有什么作用,那你去体会一下。好比如说咱们呢,再去创建这个表的时候呢,有可能这个表呢,它的字段呢是非常多的。啊,然后呢,从横向上来看的话呢,这个表的数据呢,可能也很多,比如说10万呀,甚至说几百万呀,这个数据呢,都是有可能的,下边呢,我们来了一个这个搜Q语句,SQL语句的话呢,我们想去查询这个表中的数据,那恰好呢,我们这个数据啊这个数据呢,它其实呢,就是借用了我们这个表中的一些字段呢,做了一些运算,最后得出来的这个数据。想想,如果要是没有这个计算列的话呢,我们查这个表中数据呢,有可能会涉及到了几千条甚至上万条这个记录,那就意味着我们每一条记录呢,都得上来,是不是一点点的这样去计算一下,然后得出来一个值,然后再看下一条,依次这样呢去得出这个结果。
16:00
能理解吧,那你涉及到了上万条数据,首先呢,这个数据量呢是一方面,另外的话呢,就是你每一条数据呢,都需要这样的临时去做个运算,得出你想要的这样一个结果,包括你这个产品均呢,写起来也稍微的复杂一些是吧,怎么做运算怎么做运算这样。好,那如果我们要是有了计算列呢,咱们在创建这个表的时候啊,就可以指明说这个列呢,就等于啊前面几个字段呢一种关系,那我们就设计好了对吧?那设计好以后的话呢,这时候你再去做这个查询的话呢,我直接就定位这样一个列就可以了,那么当你这个表中的前面这个字段呢,做修改的话呢,这个字段的值呢,也会自动的去做一些修改,那这样的话呢,是不是就方便很多呀,相较于原来的我们的SQL写法来说,呃,有了计算列了以后,那我们这个在。表的设计当中,我们要是应用了这个计算列,那它的这个查询的效率呢,显然呢就提升了。啊,显然就提升了啊,比以前方便多了,以前的话呢,你得是不是得先算一下是吧?啊这是我们说的这个问题行,那什么时候呢,我们去声明这个计算列呢,这个呢跟咱们去这个修改一个列是一样子的,我们怎么去升这个修改一个列呢?你可以在造表的时候呢,是不是就指明这个列的信息了,对吧?或者的话呢,你在修改这个表的时候呢,诶把这个列呢去做一个调整啊,就是跟我们前面讲修改列的时候呢是一样的啊创建的时候指明修改表的时候呢,去修改这个列。
17:26
下边呢,咱们以创建表为例去说明一下,如何呢去体现这个计算列啊下边我列了一个例子,咱们直接呢,就在这个代码中这块来看了,好这样的话呢,我们就以咱们叫艾特硅谷DB这个为例吧,啊,咱们这块呢,讲的是这个第四个点哈,叫哎,My circle这个八的一个新特性。哎,新的性的我们叫做这个计算列好,那这块呢,刚才说了,我们还是去use一下叫艾硅谷DB,那我们使用一下这个数据库,好选中呢执行一下。然后接下来的话呢,我们去create一个table。
18:03
啊,这个table呢,比如我就叫做TEST1吧。咱们这里边儿有这个表吗。F5刷新一下。啊,没有是吧,哎,我就要这个名了,行,然后这个表里边的话呢,我们就按照刚才例子中提到了,就叫ABC吧,然后A呢是一个int类型,B呢也是一个int类型,C呢,注意C呢首先也是个in类型,然后其次的话呢,这个C呢,声明的时候呢,我们需要指明它就是一个计算力这块,怎么写呢,叫generated。诶,这个单词呢,不太好写啊,写成英文的是吧,Generated,然后叫做always。嗯,然后呢,一个as。小括号啊,A加上小写的A加上一个B,这就我们现有的这两个字段是吧,让他俩的和呢,充当了我们这个C的这个字段的这个值,然后后边呢,接着再加一个单词呢,叫做virtual。嗯,就这个单词。这个virtual呢,就是虚拟的意思,就是virtual machine,就是虚拟机virtual reality叫虚拟现实啊,就这个意思,好,那此时呢,我们把它选中了,做一个执行。
19:07
那这就可以了,那此时呢,我在这稍微标识标识一下这个C这个字段呢,就作为了我们的计算列。还是?C啊,即为。那这个计算B好,然后接下来的话呢,我们往这个表里边呢,去添加一条记录啊,我叫insert into一下叫TEST1,然后我指明呢,就光往这个A和B这两个字段中呢去添加,然后values,我这写一个十吧,就写个20好这个时候呢,我们没有去往这个C这个字段呢去添加数据,按照我们以前的理解呢,它就应该是no是吧?当然此时的话呢,大家看一下select清from一下test in。好,选中呢,我们去执行,大家会发现呢,我们这个C的值是不是就是30啊,下面呢,就是自动的做了一个A加B的运算,然后接下来的话呢,我们去update一下这个T1。
20:02
啊,然后呢,晒一下这A呢,比如我们改成这个100了。因为咱就这一条记录,我就把这个相当于十呢,就改成100了啊,也不用加这个位了啊行,那这时候呢,我们改完以后。啊,然后呢,我们再去做一个select的一个查询,大家会发现呢,我们这个C呢,是不是也相应的做了一个调整。这呢就是它的一个新特性啊,非常好的一个新特性,那我们在实际生产环境当中,大家呢,就可以考虑呢去,当然你得在这个八的这个环境当中啊,你就可以考虑去使用我们这个计算力了。嗯,没有问题是吧,好,这个呢,我们就说清楚了,这个是它的一个新特性。
我来说两句