00:00
下边啊,咱们就来讲解一下这个清空表呢,和我们提到这个叫删除表数据呢,这二者操作的一个区别,哎,这二者操作一个区别,同时呢,我们还提到了来讲一下这个DC当中的commit和这个对吧?行,那咱们下边呢,进行一个说明,首先的话呢,我先把这个DC当中的这个commit和roll backck呢,咱们先给大家介绍一下,说这哥俩呢,到底是什么意思,好,那就是DC当中的这个我们称为呢叫commit和这个roll back它的一个讲解。那这块呢,我们首先呢,介绍一下这哥俩。这个首先呢,来我们说一下,这个叫commit,这个commit呢,我们翻译过来呢,叫做提交数据。提交数据什么意思啊,我们说一旦执行这个commit操作呢,我们这个数据呢,就被永久的保存下来了。我这写一下,一旦呢,执行这个commit。那则我们说这个数据呢,就被永久的保存在了数据库当中。
01:01
啊,永久的保存在了数据库中,那这个意味着什么呢?意味着呢,就不可以回滚。数据呢,不可以回滚。哎,就是这样个意思。回滚的话呢,就是我们说的这个roll back啊,或者咱们之前呢,也给大家介绍过,就是所谓的这种叫撤销,就像我们这个,呃,在很多这个软件当中,我们是不是都看到有这样一个撤销的功能,对吧,就是一旦呢,我们要执行了commit之后呢,你要执行这个撤销啊,就不好使,就是因为它已经对这个数据库的修改呢,是一个永久性的了。那就是这样的一个意思,那有同学说,那我就想改了之后呢,我我就想再改怎么办呢?那你只能再去执行增删改的这个操作,你去再再把它改回来,只能这样,就比如说呢,你现在呢,是把这个1000块钱呢,转给了另外一个同学,对吧,就是这个事儿呢,假设已经完成了,通常呢,咱们意味着就都是这个commit了,那你说呢,哎呀,我这个呃后悔了怎么着的,那你只能是再跟你这个同学呢,好好说说,你把钱你给我转回来,这就是另外的一个操作了,他跟刚才我们说这个呢,他其实不是说通过回滚这个达到的,对吧,或者我们也能看到一些场景呢,就是比如说这个电子诈骗吧。
02:10
这个电信的这个诈骗,然后呢,这个把这个钱呢,汇给了这个,呃,比如这个这个。快人了是吧,然后呢,这个通常呢,比如银行这块呢,它控制两个小时之内呢,它是可以这个才能到账,那如果说呢,两个小时已经过了,这个钱已经过去了,这个呢,你即使你发现他是这个骗子的话呢,这个你也没办法呢,说让银行给你转过来,因为银行呢,他得保证不能这样去行为,这个这样去做是吧,你只能去找警察,然后警察这块呢,让这个小偷来确认了,他是这个小偷了,或者这个骗子了,再去打回来,这就另外一个事儿,那我们不是通过这个呃回滚造成的是吧,是你又重新的让他再给你打回来另外的一个这个行为了啊是这个意思。啊,那总之呢,我们要强调的就是数据一旦提交以后呢,它就不能够回滚了,而这个诶roll back,它这个单词的意思呢,就是去执行这个回滚的操作,它呢成为呢叫回滚数据。
03:03
它叫回滚数据,那就是一旦执行,我们这个叫roll back则。啊,可以实现数据的一个回滚。哎,数据的这个,哎回滚,那你看我这块呢,我写的是可以执行,就没有说一定是能成功的啊,这个到底成功不成功的,我们就以这个chocolate table和这个delete from,我们去给大家去演示,就可以实现数据这个回滚,那呃,这个回滚到什么程度呢?我们这块呢,再给大家注明一下,叫回滚到最近的一次。Commit之后。你看这块呢,这个就能够把我们这个和就把它联系在一起了,来我来举个例子啊,比如说呢,我们现在呢,对这个表呢,进行过一些操作。具体这个操什么操作呢?呃,其实就是我们下一章呢,要给大家讲的这个增删改的操作,好,那我们这块呢,做过一些操作之后呢,我这块呢,执行过一个叫commit,相当于我们把这个数据呢,是不是就给它永久的保存起来了,对吧?然后呢,我又做了一个操作,再执行一个commit或叫CR,然后我又做了一个操作,那么这个时候呢,我们去执行这个叫roll back。
04:11
我执行这个roll back,那问大家我们这时候这个roll back呢,数据实现回滚,它回滚到什么程度呢?他能够一下子把我们上边执行的这个这个这个都回滚回去吗?不可能的,那回滚到哪儿呢?它只能回滚到最近的一次commit之后,那也就是我们这个第二次这个commit之后,那就意味着我们这一次操作呢,就相当于是失效了,你就数据呢,比如说你做过什么修改,就又给撤销了,对吧,而这一次和这一次呢,修改就被永久性的保存下来了,因为你在他们二者执行完之后呢,你执行过这个commit。OK,这块呢,注意一下,那么以这里边的commit和为代表的呢,实际上呢,提到的就是我们所说的这个事物的概念。咱们在当初讲这个分类的时候,就circle呢,分三条主线,那当时这个dcr里边呢,提到他俩,我也当当时呢就给大家提过,说这个commit和呢,咱们单独的还给大家起了个名字叫做TCL。
05:05
啊,不是咱们说的那个电器的那个TCL,这个TCL呢,T就是transaction,就是事物的意思,C呢就是control,然后language就是事物控制相关的这个语言,那对应的其实就是我们这两个指令。诶,就是这两个指点行,那关于这个事物是什么呢?咱们这个先不解释啊,咱们先把这个,呃,Table和delete from呢,先把它俩弄清楚之后呢,咱们稍微的给大家提一下这个事物,主要呢,我们事物放到下篇中去讲。那么咱们先把这两个词呢,说清楚之后呢,来咱们接下来呢,去给大家去对比一下。对比一下,咱们上面提到的叫delete。叫table和delete from对吧。和delete这个from,这个delete from呢,严格上来讲呢,我们是下一章当中给大家重点要讲的一个操作,只不过呢,我们现在提到这个table的话呢,咱们就在这块呢,给大家引出来,这样呢,顺便呢,我们把这个呃,这个dcr里边这两个操作呢,给大家也讲解了,好,本身这个操作呢,其实也不困难,来我们看一下这个二者的话呢,呃,我们对比他们说明二者呢,肯定还是有一些相同点的,对吧?那首先呢,我们说一下它们的一个相同点。
06:16
相同点,这个chocolate table和我们的delete from呢,他们俩呢,都可以实现对表中所有数据的一个删除。哎,都可以实现对表中所有数据的这个删除。那同时呢?这个同时是保留这个表结构的,压G呢,就是只是把数据给删掉了,这个表结构呢还在啊,这是它们的相同点,那么不同点呢,实际上呢,是咱们现在呢,比较关注的一个问题,对吧?那么这个不同点我们该怎么去描述呢?在这里边我们先来说一下,这个叫tnket table。哎,先说一下它这个tnket table的话呢,它叫清空表数据,我们说呢,一旦执行此操作。
07:04
哎,这个数据呢,表数据呢,就全部清除。表数据全部清除,这个呢都很清楚啊,同时我们说这个数据呢,是不可以回滚的。那杨IG呢,就是我们一旦执行完这个操作之后的话呢,数据就没了,然后呢,你说哎呀我后悔了,能不能我执行一下这个roll back给回滚回来呀,注意执行完roll back之后呢,他倒不是会报错,而是呢,默默的就结束了,当你再去查看一下表中有没有数据呢,仍然是没有的,那言而之呢,就是他不支持这个回滚。啊,是不可以回滚的,就是相当于不止是回滚对吧?好,那接着呢,我们来说一下,这个叫delete from。说一下这个叫delete from,这个delete from呢,哎,我们说一旦执行此操作呢,表数据呢,可以全部清除。啊,这个怎么加了一个可以呢?就是我们这个delete from呢,咱们下一章讲的时候呢,诶,我们到时候还会去加上一个where操作,就是过滤数据嘛,就是我们这个,呃,加上V尔呢,你可能只删除一部分小的一小部分数据,但是你要没有加V尔呢,就是表中数据全部就都删掉了,就说这个delete form它比较灵活,哎,那这块呢,我们说的就是它可以删除所有的数据,也可以删除部分数据是吧,那我们表示可以呢,就是说它是可以选择的,而上面这个呢,是没有选择,它就是清除所有的。
08:22
啊,所以可以呢,想表达是这个意思,OK,那么它呢是可以表数据呢,可以全部清除,那这块呢,我们在严格,怕大家有的整不明白,我在一块写上就是咱们主要呢,在操作的时候呢,你就不要去带这个where就可以。它就可以实现的,就是全部呢都删掉了,那么它这个同时呢,区别在哪呢?这个数据呢,是可以实现回滚的。诶,你看这样一对比,这个区别呢,是不是就很清楚了是吧,这个是可以实现回滚的,注意你看我这块呢,我其实想表达的可以实现回滚,言外之呢,就是也可以不能回滚。还说哎呀懵了啊,这怎么叫这个又可以回滚又可以不回滚呢,这里边儿就涉及到一种默认行为了,那以这个为代表的呢,诶咱们这块呢,再给大家引入一个东西了啊,就是咱们现在说的是这个chocolateet table,这个呢叫delete from是吧?这哥俩呢,背后呢,呃,有不同的这个结构的,这个叫什么代表。
09:21
就是相当于这是两个这个叫PK的人,这两个后边呢,都有不同的财阀是吧?诶代表的分别是谁啊?诶我们这里边提到了这个trumpet table为代表的是不是我们这一章讲的叫创建和管理表,那其实呢,是不是就是咱们讲的这个DDL的操作呀。好,我们先把这个理论性的东西呢,先都给大家这块抛出来,然后呢,咱们去做这个演示。行,那这块我用一个这个多行注释来说吧。用这个多来说行,这个呢,咱们就写成一个九,那先把这个事呢,先说清楚,就是这个DC。哎,第六先说。和。
10:01
诶和咱们这个叫DML是吧,DML呢,咱们下一章呢,重点去讲就是增删改是吧,这块的操作,这个DDL和DCL的一个说明,嗯,这个说明好那块我们来写一下,这个首先呢,我们说一下第一个说明吧,就是这个tnket table为代表的呢,是我们的这个DDL。那么这个DDL的特点是呢?是什么呢?就是DDL啊,咱们说这个一旦执行。啊,对应的的操作吧,就是比如说创建表啊,修改表啊,删除表啊,清空表啊,重命名表啊是吧,这样的一些操作,就是D调的操作呢,一旦执行就不可回归。很清楚就是不管tet table是这样子的,以它为代表的DDL呢,都是这样子的,行,那接着呢,我们来说这个对应的另外一个就是DML是吧,这个DML的操作呢,我们得这样说了,默认情况下呢,这个一旦执行。
11:00
啊,也是不可回滚的。这个默认情况下,那比如说像我们说这个delete from,哎,咱们下一章还要讲增,还要讲删是吧?哎哎,增还要讲改,加上它呢删这三个操作对吧?这三个操作呀,我们说默认情况下呢,这个执行完以后呢,诶你要是执行这个roll back呢,它也是不能回滚的,但是呢,诶我们可以去修改一个参数,通过修改这个参数呢,让他实现可以回归。哎,修改什么参数呢?那我这接着说啊,一旦执行,哎,这个也是这个默认情况下,一旦执行也是这个不可回的,但是啊,如果在执行DML之前,这个执行了什么呀,我们有个操作呢,叫set,这个我用大写吧,Set叫auto commit等于false。嗯,这个呢,有点长了啊,这个我们给他。哎,这个我写成二吧。
12:00
就写个二行,这样我们就给它换行一下,这么着说呢,呃,但是呢,如果在执行DML之前执行了这个set auto commitm等于false,那我们说呢,则哎,这个执行的这个D操作呢,就可以回滚了。操作。哎,就可以实现这个回滚,所以说呢,我们上面写的这个delete from呢,说它可以实现数据回滚,那到底能不能回滚啊,主要取决于就是咱们有没有呢去执行这样一个操作,默认情况下呢,这个set auto commit呢,它是true的,哎是true什么意思啊,你看auto commit是不是就自动提交啊,哎,它要是个true呢,就是意味着就是自动提交,相当于呢,就是delete from呢,我们执行,我们要执行完以后呢,他也会去自动提交一下。但是呢,如果我们改成force的话呢,它就不自动提交了,因为呢,你没有自动提交,所以我们回滚的话呢,是不是就把它这个就撤销掉了是吧,所以它就可以回滚了。啊,这个逻辑有点严密啊,大家稍微捋一下,那有的人就会想说,那你这个DDL操作呢,他说默认呢不能回滚,那我要是在DDL执行之前也操作过这样一个指令,然后呢,我们这时候呢,能不能回滚呢,注意也不行。
13:13
那那就相当于呢,我们说这个指令。哎,指令他呢,是不是对咱们的这个DDL这个操作失效啊。失效就相当于呢,你这个呢,操作完以后呢,那不行啊,这个还是不能回滚的,那就是我们说的这样的一个道理。这块呢,大家稍微的体会一下,那么接下来的话呢,咱们去做一个演示啊,演示一下这个这哥俩呢,为代表的一个是DDL,一个是DML,哎,是不是满足我们这里边说的这样一个特征,是这意思吧,好,那么演示的话呢,我们先演示谁呢。啊说诶这先演示谁后谁其实都无所谓的是吧?呃,但是的话呢,我们这块呢,建议呢,先演示delay from,比如说我们这里边选一张表,然后呢,我们从这把这个数据删掉了,然后一回滚回来了,然后再用table,再演示的话呢,诶没回来。
14:02
哎,这就相当于就结束了是吧,你要是拿先演示的话没回来,那你要是拿delete from呢,是不是还得再造一张表,就有点不太方便啊,所以这块呢,我先去演示,这个叫delete from,哎,先来演示它。那么先来演示它的话呢,这个过程是什么样的呢?咱们这块呢,得先找一张有数据的表啊,找谁呢。嗯,咱们就别去动咱们的员工表和部门表了,这些都留着咱们上面呢,创建过一个表叫my employ my mp3是吧。是不是这个表啊,来,我把这个呢,CTRLC一下。嗯,演示一下好,那首先这块我们搂一眼看看啊,确实是有数据的行,那这个表呢,有1066条记录,我们就拿这个表呢来说事儿。拿它来说事行,那么首先来做一个什么事呢?大家看一下我我先这么着一下,就往防止呢,大家这块呢,有有其他的一些想法啊,咱们就是严密一下,我上来呢,我就不管三七二十一,我先commit一下,不管你前面都干过什么,反正我先提交一次。
15:05
对吧,我先提交一次,好提交完以后,那我这块呢,我去查询一下这个表一看哦,有数据行这呢就是铁定他这块是有了,然后呢,咱们去执行这个操作,我把它呢拿过来。我把它拿过来清楚吧,好,此时呢,我执行一下。那么执行完以后,那接下来的话呢,我们这我这块就不用查了啊呃,这这个其实是不影响它的,对吧,然后接下来的话呢,我们是就delete from了。From一下,我们这叫MYEP3,我就把这个em my ep3这个表中的数据呢,给它干掉了,干掉以后呢,我们这时候呢,去查询一下,那自然而然的是不是就没有数据了,好了,很清楚是吧?好,那没有数据的时候呢,呃,这个我我把这个再粘一份吧,大家呢,你就照着我这个呢,一步步往下走就行,没有数据了以后,此时我们去roll back。啊,这个就我们所谓的叫回滚数据了,来我们执行一下。回滚了,嗯,不要看这这个看这就没啥意义啊,那回滚完以后呢,我们再去做一个这个查询。
16:07
来我们选中一执行好,大家看此时呢,数据是不是就回来了,那就意味着我们这时候这个回滚操作呢,它是有效的,对吧?那为什么有效呢?就是因为我们说了这个回滚操作呢,一旦执行它就会呢,呃,相当于回滚到这个最近的一次commit之后,那最近一次是什么时候呢?是不是就我们这个commit之后啊,那阳位啊之意呢,你中间这里边查询的不会影响表数据了,是不是这个操作呢,就给撤销了。相当于这个数据呢,这不就回来了吗。OK是吧,哎这呢,我们标一下这个对应的这个步骤,这个呢算是这个,哎,我就写个这个这样吧。一是吧。哎,这还有一个呢。这个一二。三。四五。诶。这这这整串了啊三四。
17:01
七好,这个呢,咱们演示的是这个delete from,然后接下来的话呢,我把这个呢,从这到这,我CTRLC一下,然后呢,再粘一份,咱们去演示这个叫窗这个table。来,CTRLC。嗯,在这A是是这个吧。好,演示一下,这个叫窗NK table,行,那这时候大家看,那我们呢,就是,呃,我也是啊,就是不管你前面干过什么,我就是上来呢,我就先这个commit一下,然后呢,我们此时呢,看一下这个表中有没有数据,那这个是有数据的,就是commit了啊,那那说明这个表的数据呢,确实现在已经是完全的保存在这个数据库当中,就是有数据的,然后呢,我们也去执行一下这个操作,实际上的话呢,我们上面执行过以后呢,这个就没有必要去执行了,但是呢,咱们毕竟是做实验对比嘛,那你尽量的让他们除了这两个语句不一样之外,其他的全都一样。避免呢,有人说闲话是吧,那我们这块呢,也去来同步的执行一下,那执行完以后的话呢,接下来我们执行的叫trumpnket table,这个MYP3来我们把这个呢清空一下,那清空完以后呢,我们再去查询,那此时呢也没有数据了,这算是他们二者的一个相同点,对吧?这数据呢,都给这个删掉了,那表结构呢也都还在,那么紧接着的话呢,我们去执行一下,这个叫这个roll back。
18:17
要回滚是吧,那么回滚完以后呢,我们再去做这个查询,大家会发现呢,这个数据你看就没有回来,那沿IG呢,就是我们这个,呃,Roll back这个操作呢,对于咱们这个窗呢,它就给失效了。啊,这个数据呢,就没有回来,这不我们在上面写的就是这个,这个一旦执行此道呢,就全部清楚了,同时呢,数据是不可以回滚的,这就我们说的这个结论对吧。好了,呃,那么说到这儿的话呢,应该算是就讲完了,但是呢,可能有的同学呢,会有这样的一个小心思啊说呀,诶这个孙老师你不是说这个这个roll back呢,它就要回滚到最近的一次commit之后吗?那要这样去理解的话呢,是不是有点矛盾呢?因为呢,Roll backck呢,我们最近的一次commit是不是在这了。那那回滚到这儿的话呢,那按说呢,是不是我们这个table就应该数据呢,得撤销回来呀。
19:03
啊,这样解释的话呢,大家好像说呢合情合理是吧?啊但是呢,我们不是说了他不能够回滚嘛,所以相当于呢,出去还没有回来,但是呢,多少感觉有点别扭啊,其实呢不别扭啊,为什么呀,这块呢,其实我们要给大家讲一个本质是啥呢?就是这个DML操作呢,就是当我们做了这个操作之后呢,它确实呢是这个。呃,不去自动提交了,就是默认的时候呢,相当于DML呢,是不是他也会去提交啊,因为它默认的也提交,然后你把这个操作完以后呢,它是不是就默认就不提交了,它默认不提交了,你不是才能回滚吗?那我们这个DDL的话呢,为什么说你设置完以后它还失效呢,实际上呢,这里边的原因是因为啥呢?因为这个DDL呢,它在执行完这个操作之后啊,它会自动的有一个commit,而这个commit操作呢,是不受我们这个操作影响的。啊,那就是我们这个意思啊,因为。那因为呢,在这个执行完这个DDL操作之后。
20:02
哎,我再换一个行。操作这个之后,那一定会执行一次这个commit啊,而此操作呢。而这个词,这个commit操作。哎,这个操作呢,是不受咱们这个set auto commit等于false的影响的。就是你这个set auto commit等于false,你这个事儿啊,只能够影响DMLDDL呢是不受影响的。那所以说咱们这个DML说明为什么默认情况下呢,它不能回滚呢,就是因为它默认情况下他也给提交了,但是呢,你要这样设置完以后呢,他就不提交了,而我们ddd调呢,就是你设置完以后我还是提交,那这呢我们就清楚了,诶为什么说这个窗不能回滚呢?是因为你在执行完这个窗ET之后呢,它默默的执行过一次commit,所以说呢,你这时候再去roll back呢,实际上是roll back到这块之后了。Ya IG呢,你这个NK table就没有回滚成嘛,所以呢,他就哎不能够回滚了是吧。
21:04
哎,这也就是我们说的这样的一个情况,哎这样情况,那这块呢,你像我们DDL呢,所有的操作都是不能够回滚的,所以说给我们的结论什么呢?大家在执行DDL操作的时候呢,一定要慎重,比如说我们看着这个表中的这个列呢,不顺眼了,直接把这个列干掉了,把这个表给干掉了,那注意这时候呢,干掉以后,如果你提前没有备份过,那就真给干掉了。那你想回滚啊,后悔了啊也不行,没有后悔药之数啊,这就我们说的这样的这个点,好,那我们呢,就关于这个,呃,DC当中呢,咱们提到了这个叫事物相关的这个commit跟back呢,咱们就说到这儿啊,那么到下面的时候呢,咱们再详细的给大家展开,什么叫做这个事物啊,什么叫这个事物以及事物包括还有相关的所的问题,还有这个叫MVCC的问题,咱们都放到这个下篇当中给大家去讲解。
我来说两句