00:00
本章的目标是使用学习事物哈,然后视图,还有这个索引,最后会学简单学习一下如何设计数据库哈。好,先看这个事物啊。呃,咱们在学习之前呢,做一个小小的实验啊,使用透的添加一条数据啊。然后呢,再使用circle plus添加一条数据。什么意思,他这是来试一下。呃,他搞了一个什么表,就great这张表啊。来great这张表great。这优丝太多了啊。杀了啊。看着都麻烦,我都整懵了,哎呀呀呀呀。还有约束是吧。那这样吧。先order是吧。然后再删。一个。没了是吧,叉也不要了,太CB都不要了啊。
01:04
好了,格表哪去了,这儿呢?123456是吧。呃,咱们给他来一个七号。此外,写词后语句。Insert inTo Great表values,这都没问题吧?七号什么级别?这是青铜白银,这这这个。最强就是王者了吧?飞升。啊,修仙飞升成仙了是吧,好,第七个阶段。执行一下。F9。执行。没问题吧,好,上这边来查一下。是不是有七号飞车啊?对吧。好,然后你按照PPT上来说。再使用circle plus添加一条数据。使用黑窗口命令行的形式来。
02:04
D。Circle。登录一下。好,然后insert inTo Great表。格瑞的Y64。来个八,哎,写个八哈,那个是七,这回咱这块是有八。当然,刚才有同学说什么要是啊。哪个药啊?七。来个世界的事。这样。好吧。好了,然后呢,分号结束一回车。已创建一行。咱们按照PPT上来说的话,是不是已经把这两个搞定了。然后再干什么?啊,为什么使用plus明明已经创建一行却查不到?什么意思呢?查询一下。
03:04
Grace表。有八吧。七呢?没有。好,先回到咱们的透的,我刚才是不是把八已经那个钥匙已经填进来了,把这块咱们刷新一下。诶。也没有,也就是说这两款软件哈。这个方式和这个方式他俩添加的数据并没有共通是吗?没有共通,哎呀,这是什么毛病呢?哎,这是真正的是什么意思啊,就是说咱们现在使用这种或者说这种两种方式,它都是把这条数据添加到哪儿呢。内存里了。并没有真正的给他落地呢,并没有真正的放在咱们的数据库的那个DB。F文件里边并没有真正的给它添加到这里边儿。
04:02
OK,他现在是玩的是内存。那咱们怎么才能给他加入真正的放在DBF,真正的实现咱们这个数据的永久持持久化呢?就是永久保存下来。记着要使用这么一句代码看了啊。诶,黑窗口去。好黑窗口。把刚才的添加之后的操作,我这会儿写一个单词叫commit分号。完成。好,我就写这么多单词哈,然后你在这边查来有了吗。有了吧。这边呢,这边这个第三方工具更方便一些啊,不需要你怎么怎么着。这边是不是就有了八号是上来了。好,现在的问题回来了,这个单词到底是何方神圣?它能够让内存中的数据真正的添加到咱们的数据库文件中。
05:03
对吧。哎,这个单词就干这个事儿了。好,接下来咱们就要学习这个单词到底什么似的。好嘞。先把刚才这个问题先咱们先留下啊,那个单词到底是干嘛的,等会儿咱们再说。再看一下。咱们学习的第一个问题叫事物,首先咱来看看为什么叫事物。来学习一个技术啊,一定要提出这个问题。我学习IO流,我为什么要学习I?对吧。好,先看这个事物,为什么啊。银行转账的问题,假设呢,A转化到B至少需要两步,咱做一个非常简单的啊。然后其实呢,转账过去是不是就是A减少B增加呀。非常简单的一个过程哈,非常简单。然后呢,转成准备数据,创建一张表,这样这样咱们能跟他保持一致好吧。
06:03
最关键的是什么呀?这块有一个检查约束,干嘛使呢?这个金钱呀,对吧,你不能负数吧。哎,你不能付出,那属于透支是吧,咱没那个权利哈,所以呢,咱把这个表创建出来。这个叫模拟。银行。转账。好,创建这张表。有一个ID列number类型组件。第二个列叫money,是不是也是number类型跟它保持一致啊,NUMBER6哈。六上面也写六吧。好。关键的是,这check检查约束前这个列必须要大于等于。A0。
07:00
OK,执行。咱们呢?等于零不行吗?这不是转账,这是银行,我的我的银行卡里边能不能为零元。应该可以吧。好像没见过啊。行,先这么着吧,明白啥意思就行,反正我的意思就是不能负钱,好吧,不能负数啊。好,然后呢,咱们开始模拟转账这个步骤啊,你看这个转账步骤干嘛呢,其实。就是更新这个银行这个账户是吧?哎,这里边儿有一二两个账户啊,刚才这步咱没做完呢,是不是没有初始化两个值啊。哎,咱初始化啊,啊insert。呃,Insert inTo Bank y61号用户,他有多少钱一,诶100块。执行。二号用户同理啊,100块。
08:00
好,两个人呢,都有100块钱,这边来瞅一眼。Bank。没问题吧?好了,咱们再按照它的步骤走啊。他说一号用户减钱,二号用户是不是相同的就要加钱啊。对吧,一个减钱一个加钱,但是这个值咱们这个可能不太对哈,咱们这样不按PPT来,咱们减50。咱100嘛,对吧,那咱就转50看好了啊。一给二汇款。一。给。嗯。给二。转账。转账50元。怎么写呢?那就是把一的100块是不是减50啊。Update。Bank。设置他的钱。等于money,哎,单词前面做money减50。
09:04
谁前50条件ID是一号。下边同理,二号要。是不是加50啊。OK,来看一下,咱们就这个值不太一样,剩下过程是不是差不多啊。哎,差不多。好,然后呢,把这两句话啊,把这两句话。关键到这了。每一句话呢,做一个分号的一个结束,因为你看啊,转正的过程,他俩应该是一个整体对吧。你不能这样单独去执行啊,应该选中一起来是吧,哎,他们是一个整体嘛,然后想执行多条语句的话,使用咱们这个软件不是F9而是F5了。而且还得使分号隔开。听清了吧?我这显示点注释啊。一起执行多条。语句。
10:01
美剧之间。呃,每句之间用分号。间隔。间隔。并且,嗯。按F。执行。好看我的。选中它。F。我的是F5啊,来瞅一眼或怎样刷新。有毛病没?没有啊。好,再转一次。F5。没毛病吧,哎,转两次是不是钱都过去了。好,来,再来一次是关键了啊。然后他说违反检查约束是吧,然后嘞,我也没管那个,我点了这个东西。一个都啥意思啊。忽略是吧,我点了个忽略。
11:00
然后其实PPT这块我已经给你显出来了,好吧。哎,我忽略了,我也忘了点了啥了,来看看我的账号怎么样了。嗯。棒棒的是吧,哎,棒棒的,好,再来一遍。哎,什么玩意儿,哎,这多爽啊。这啥意思啊,刷钱的是吧?结果会发现是不是出现这个问题了。哟,这咋回事啊,这是。他这个钱呢,不断的增加,而这个是不变啊。OK。出现问题了是吧,出现问题了。一账户没有减少,二用户确实一直在增加,一直在增加对吧。好,你得知道产生这个问题的原因是什么。啊,发生错误的原因是这样的啊。好,它执行update语句违反约束,是不是这个约束是大于等于零啊,所以大家看啊,我这块在执行第一句代码的时候。
12:07
虽然说我选中的是一堆直行对吧,那么在它也是有自上而下一句往下走,走到这儿的时候,首先它减钱。我已经零了,你再减钱的话,这句话是不是报错了?然后呢,这句话报错的时候,我点了忽略,我忽略他,我管你报不报错呢,对吧,我忽略这句话的报错,然后继续往下走第二句。结果第二句加钱加钱棒棒的,他没有上限是吗?越多越好,所以第二句一直执行成功,也就说第一句啊执行失败,第二句执行成功。一直在这么走,一直在这么走。所以第二句一直在加,而第一句呢,一直都没有变。正是因为他们有。什么?一句执行失败,第二句执行是成功的。
13:02
还有同学说。这这是这这个问题,这个错误原因有啥,有什么问题,会怎么怎么回事呢。其实啊,你应该真正的转账应该怎么做呀,应该让这两句话真正的形成一个整体。你看刚才咱们做的时候这句话失败,这个剧成功,最终钱是不是还转回来了?这不对啊,你应该让他俩真正的行为一个整体,如果说其中有一句话出错了,那么第二句话根本就不需要执行了。是这样的吧。哎,或者说咱们这个简单一二两句话,假设是一个非常复杂的业务逻辑。一句代码两句三句四句五句六句七句。成功成功,错了。然后只要有一句话出错。整个你就别往下走了,因为肯定不结果就不对了。
14:01
是不是这样子啊。哎,只有什么时候钱才能真正的转过去。成功成功,全都成功,全都成功,钱过去了。钱过去了。有点类似于什么呀,咱们在玩一些游戏啊,或者说什么。呃,比较严格的交易环境中啊,他就会这样检查你的当前操作系统。检查你操作系统的用户权限,检查你当前支付环境有没有木马,检查你这个网络成功与否,然后检查很多事儿。只有这么多检查全部才通过,你才能开启支付宝转账。对吧,否则的话,只要其中有一个是错误的,你根本就转不了账。是不是这个意思啊?好,那这个过程其实咱们就把事物的概念呢,已经告诉大家了。到底什么是事物呢?来,往后看。
15:01
事务啊,是作为单个逻辑工作单元中执行的一系列操作。不明白不太明白,反正你就记住了,它是一个系列级的操作是吧,系列操作说的意思说白了就是一堆,就是好多个操作啊。第二句话,多个操作作为一个整体向系统提交,要么都执行,要么都不执行。好第二句话,看三秒钟把它背下来吧。这就是事物的概念。其实这个呀,非常好背哈,非常好背。就是这样的,你想很好背啊,就是三句代码。要不然全都成功。要不然,只要有一个错的,只要有一个错的,全部打回原形。是不是就这意思啊?或者说咱换成什么,呃,古装电视剧里边。
16:01
不求同年同月同日生,但求同年同月同日死,是吧?就是要么一起生,要么灭团。就是这个意思,OK。这就是咱们这个事物的概念,事物的概念。好,然后事物呢,是一个不可分割的工作逻辑单元,咱们仨拜上把子。哎,就拆不开了,歃血为盟了是吗?对吧,只要老二你死了,好嘞,老大老三为你为你陪葬。是这个意思。哎,只要你功成名就了,那么老大老三也跟着你享福。明白啥意思了吧?好,咱们再次回到刚才这个银行转转账这个过程哈。刚才银行转账出现了这个这个这个结果数据的失败正是因为。在他俩并没有真正的形成一个整体。哎,第一个错误了,你还执行第二个干嘛呀。
17:00
只要他错了,你就别往下走了呗,对吧,哎,就是这个这个样子。那咱们怎么来规避这个问题?或者说接下来我用事物把刚才这个转账的这个事儿给大家再搞一遍。看好了啊。好了。我把数据呢全部打回原形,我这个就不用执行了啊,这么改一下就行了,它为100。它为100。哎,我去。尴尬了。100。好,这块需要勾上一下,就是确定一下啊,确定一下,然后这块还要commit提交。Commit提交好了,刷新是不是都100了,等会再说,Commit啥意思啊?现在打回原形了,接下来看我要对这个语句呢,使用事物解决这个问题啊。使用事物解决转账问题。
18:07
OK,使用事物来转账呢,这么干?当然现在这个代码呢,你只是简单的关注一下就好了啊。嗯,开始结束,写一个代码块。写一个代码块,然后这里边儿把这两句话呢粘过来啊,代码还是这个代码怎么都跑不了。跑不了啊。然后呢,每次更新完进行一个提交。当。但是提交的过程中如果出现错误。Ex,什么单词?哎,只要出现了异常。OES。泽。揉。
19:01
好了。使用事物呢,我已经把这个搞定了。这个啥意思?一些。生。肉外。以及词。OK。只要你碰上这个单词,大家全活。只要你碰着这个单词灭团。咱们接下来我把它全部选中,按F5哈NF5首先这边再次确定一下一百一百。好了,来F。刷新。没毛病。刷新。没毛病,接下来关键点了是吧,F5。行了吧。你这不管按多少次哈,他这边的数据还是不会变化的。是不是现在这是正确的呀?对吧,你不能说凭空搞出多50块钱呀。
20:02
这样的话呢,咱们把这个使用事物就解决了。使用是不是就解决了,好简单的给大家解释一下这个代码啊,这个是代码块的开始和结束,你可以理解为啥呢?定义了一个方法,大括号开始,大括号结束,OK。然后这里边儿呢,两句代码。如果这两句代码没有报错,那么大家一起升,也就是说真正的一起修改数据。一起修改数据。当第一句话,或者说第二句话,甭管哪句话吧。刚才咱们报错了,是不是就这第一句啊。因为有约束检查嘛,说不让你小于零。所以当咱们再次比如说现在零的时候,再减50的话,这块是不是报错了好。拆开,大家都学过了,当这句话报错的时候,那么整个程序流程此时从这个位置是不是直接掉入异常区啊?对吧,跳入异常区,然后这个呢,这个简单理解为就是当补货异常。
21:06
就是当有错误发生的时候,则。174。也就是说,以上代码全部。来玩儿。全部白玩,失效了。哎,不管你转多少钱,全给你打回原形。这就是roll back一起死的这个意思。哎,一起死。好,整个这个代码呢,就这样啊,这样呢,咱们就使用了事物呢,把这个转账问题完美的解决了,它不会再出现凭空多50块钱的这个样子了,是吧。来。嗯,把这两个这事物的有四个特性哈,四个特性简称为acid。Acid。这篇呢,好好看一看啊,好好看一看。原子性、一致性、隔离性和永久性。首先看原子性。
22:01
原子性,什么叫原子啊?事物是一个完整的操作。各个步骤呢,不可分割,要么都执行,要么都都不执行。他们是一个整体,不能分割,我们是一个团队,不要说把我们团队分为两个部分,OK,这叫原子性。第二句话,一致性。当事物完成时,数据必须保持一致状态,啥意思?刚才这个演示的非常清楚。一开始一百一百,最后。变成了一开始一百一百,最后变成了零二百。从开始到结束,数据的总和变过吗?没有吧,而之前没有使事物的时候。是不是经常会出现250,后来我搞成400了。那你看,原来一共就200块,你搞成400,这样数据和原始状态保持一致了吗?
23:00
没有吧,所以这不是事物啊,事物就是你之前多少值,之后呢还是多少值。当然指的是总和。好吧,总和。这叫一致性。好,隔离性。并发事物之间彼此隔离、独立。就是说我这个事务负责的是银行转账。里边多少句代码你就甭管了。我这个事我保持的是每个月给你算点利息。对吧,如果你是定期存款的话,每个月给你算利息。这个事物呢,咱们解决的是买基金的问题,这个事物是咱们炒股的问题。事物,事物,这四个事物之间是没有任何关联的,明白啥意思吧?就是我的团队,你的团队,咱两个团队没有任何交集,我的就是我的,你的就是你的,OK。这叫隔离性。所以这写的什么?
24:02
并发事物。并发事物,好吧?最后一个永久性,永久性是什么意思呢?事物完成后,他对数据库的修改永久保持啥意思嘞,就是这样呢,刚才咱们执行过程当中。由一百一百现在变成了零二百。不管你怎么刷新,不管你在。这块查询。Bank。是不是还是零二百啊,瞅一眼啊。没问题吧,还无论你还是在黑窗口中也查询一遍select from,哎,我去。是不是还是零二百啊。对吧,我对数据是不是真正的做修改了,我不管你用什么软件。来连接我的数据库,结果永远是零二百。这就是永久保存,永久保存了。
25:03
以上呢,就是acid。Acid这块呢,AC为什么是a cid,我这个英文单词给大家列出来了啊。OK,事物的特性,事物的特性。好使用事物呢,分成三个步骤啊,第一开始事务,开始事务非常简单,基本上你不需要做任何操作。可以理解为它自动就开启15。啥意思呢?上一个事物结束之后进行的第一个DML操作,它就会自动开启事务,好,DML是啥来着?忘了没?哎,数据操纵语言是吧,包括的就是添加。修改。和删除对吧。增删改。只要,所以说。这句话又衍生出另外一个问题,只有增删改,才有事务操作。
26:06
OK,写上啊。查询没有事物。只有。DML。也就是是。增。呃,添加删除。修改。有事。OK吧?再看。好事物它会自动开始,自动开始,那么什么时候提交就是commit,碰到这个单词就提交事物了。回滚也叫撤销叫。You back。哎,只要碰这个单词。大家全都白玩,一切打回原形。一切打回原形。比如说咱给大家这个是刚才写写的是吧,写的好,这样我简单的给大家做一个简单的实例,看看这个肉多恶心好吧。
27:06
比如说咱们就往bank这个表里边儿添点数据哈。来,我把这个句话放下来。我添加一个三一百。四。100。我100。没问题吧?看了啊。把它分号分号,哎,我去不是这个。大家看,我把他们四个四行代码全部选中F5。哎,没什么报错是吧,然后你到这边来刷新一下,你看白玩。你看啊,他添加了,他添加他添加结果三句话是不是都往表里边插一条数据啊。结果碰上他了。碰着他了。他怎样?
28:01
你们仨白玩儿了。全部打回原形。全部打回原形。哎,那如果把这个单词替换成。Commit。好,结果就不一样了。F5。刷新。全进来了。好,明白这两个单词啥意思了吧?哎,真正的添加进去。全部打回原形。600。好吧,这就是咱们这个东西啊,这个东西。这个就是咱们的commit和roll back。所以说这回咱们知道我在修改这个数据的时候,为啥要点这个东西了吧。啊,为什么叫他呢?就是说只有点了它,就相当于我执行了commit提交。真正的把数据进行了修改。
29:00
如果你不点它数据没有真正的进去。咱们再次回到咱们的黑窗口。看之前也是我不插一条数据吗?你把它弄到了内存里。然后查询,你在本窗口是在同一个内存区域做操作,所以能查到,但是你换成错误的是不是查不到了。然后我又执行了一个真正的提交。真正提交之后,不管你在这儿还是在这儿是不是都能查到了。OK,所以这个提交很重要。很重要啊。以后呢?真正的提交会让你很痛苦,如果你忘了这个事儿呀,你在这玩数据库玩了半天,或者说你做了一个系统是吧。假设做了什么什么系统,我登录账号,删除密码之类的,一一顿操作猛如虎,一查数据库,一点没变化。你也知道是咋回事?肯定就是事事物的问题。
30:02
OK啊,这两个一定要记住。A接种。OK。啊,这有一个练习,说是办理学生离校的一个啊一个代码哈。这个。稍稍有点复杂。但是呢,我我先带着大家走一遍啊。这个太复,有点复杂啊。来,我给大家带着,带着大家走一遍。他说,把这四句话啊,查询result表中所有白银阶段的考试成绩保存到表这个表中。什么叫办理为孝呢?简单来说就是这样。咱们整个这个表的体系中哈,一共有1233个年级的学生。对吧。然后呢,咱们首先将三年级中的成绩。保存到历史成绩表中。
31:02
然后呢,第二句话把三年级的成绩删除掉。这个两句话执行之后,也就是说咱们这个三年级的学生的成绩真正的进入了历史是吧,真正的成为历史了。好,咱们应该怎么做一下呢。这么做?首先创建这张表,叫history result。Create table。History。ST。Result。这个表要保存什么?我要保存白银阶段的所有学生的成绩是吗?对吧,那白银阶段是什么阶段呀,我怎么知道他们是白银啊。你是不是得先查出来啊?好,来看啊。查询。
32:01
Result表。天呐。这个表里边儿,你能看出来这个哥们儿是哪年级的吗?这哥们是哪年级?能看出来吗?这,这有吗?是不显示吧。对吧,那我咋知道他是哪个阶段的呢。Subject ID是吗来?Subject。那你每个课程是不是有隶属于年级啊?那白银阶段又是哪个年级呀?Great name等于。OK,是不是二啊。对吧,好,那这个查询出。
33:03
ID。是不是就是二啊。所以说第二学期的课程是这些。第二学期的课程是这些?那咱们再查第二学期这些课程的成绩都是怎样的?课程的成绩都是怎样的?那也就是说where subject ID应该。In,是不是以下范围啊?五六七八九十。OK吧?接下来查询的12条数据,12条数据全都是什么?哎,全都是咱们。白银阶段的成绩信息了。那接下来你看他要干什么呀。我要把这些成绩保存到history表中。那黑色表咋还没建出来呢,是吧?
34:01
你姐知道我这个history这个表里边儿长成什么样,都什么列呀。怎么知道啊?那你看我是不是保存的是这个数据,要保存到这张表中啊。那这两张表结构是一样的呗。能理解不?它俩是一样的啊,一样的。好,那么咱们就挨个写呗,一个ID,一个student,我天呐,懒得写了。脚本啊,我脚本这里边儿有吧。My my school是吧?呃,然后成绩那个列。哪儿的?好,这呢,这是不是result表啊。这不就是我这张表吗?粘过来。OK。你看这里边儿是不是学学号科目成绩和考试日期啊。来,把这张表创造出来。
35:03
好,这张表现在已经有了,接下来干嘛?这样的。我现在要把整个这个结果集都扔到这张表里,怎么怎么做呢?这个就恶心了,这个就比较恶心了。因为你看这个结果集里边查出多少条数据啊。是12条啊,那难不成我就看着一条一条一条写音色的印度吗?也就是说写12条音色的印度搞到这个表里边呢,那不行啊,那不行,你太累了,你12条还行对吧,万一来一个1200条呢,你就写死了是吧。啊。怎么做?我在PPT里边给大家列出了一个非常棒的语句。你猜猜这个语句干嘛呢?我要往TABLE1里边去插入是吧,插入啥嘞。
36:01
查询的结果直接一股脑的怼到这个表里。帮不帮?咱来看试试呗。对吧。Inside into。Insert into,往哪张表里添加呀叫?Result添加,添加什么东西查询?三星。Result表啊,其实是不是就是上面这个。是不是上面这个。条件。这些。OK,你查一遍。对吧,是32条啊,那接下来我就要把整个这个结果,也就是说这个结果直接给他怼到这个表里来执行。好了,那这个表里边儿有没有数据嘞。查询。OK。有了是吧,有了那你上黑窗口里边来查一下这张表。
37:04
星。From history。造。啊,单词写错了吗?啊啊。哎呀,重写吧。黑色to是吧。Result。表是有的,但是里边数据的呀。没有是吧,为啥嘞。因为我执行insert代码,Insert代码是不是叫DML中的添加呀。他呢,是有事物的。所以在执行完这句话,需要。看一下。这个不用分号来执行一下。
38:00
哎,没点着直行。F5啊。Commit了是吧?好,咱们再回到黑窗口。什么鬼?激动了,是不是都进来了?但这格式,我的天呐,这格式太丑了吧。咱不看了啊,反正进来了是吧。啊,进来了。好了,那咱们的第一段操作结束了吗。我是不是把白银阶段的考试成绩保存到了历史的表里啊?接下来第二个是第二个干嘛。删除原先这个表中的成绩。也就是说你看就是这样的,这是原先的这个表里边儿白银阶段的成绩在这儿呢。我把这个结,这个结果,这个结果挪到了另一个表里,然后把原本的这个值是不是应该。啥符号,这是。删掉吧。
39:00
哎,删掉哈。怎么删?条件是不是还在这儿呢,是不是还是这个条件前面变成。完事了吗?是不是这个样子?好,这是删除操作吧,需要干嘛。密达。OK,执行。执行。好,再一次,这是历史表哈,历史表咱就不需要查了,你这边来看一下啊。咱们切换到result。原先是88条数据,现在变成了76条,是不是正好删除了12条?这个过程呢,给大家搞定了,然后大家来看啊,是不是前一段搞定了。后边这一段。复制前面这一段。你看他干嘛呢?查询学生表中白银阶段的学生记录,保存到表history student。这回不是成绩,而是学生记录了。
40:02
对吧。把这个表保存下来,然后删除学生中白银的记录,是不是跟这个一样一样的。只是换个表而已。对吧,画了一个表而已。那么剩下的这个操作。大家就仿照着我之前的。接下来。大家看着我这段代码,把这段。执行出来。哎,这块呢,需要,因为我没有history student是吧,而且student这个表里列出很多呀。我刚才怎么做的?脚本里边有没有。肯定有吧。最顶上那个表。我。这是不是那个建表语句啊。把这个copy过去不就见表了吗?改个表名是不是就完事了?
我来说两句