00:00
好了,咱们继续啊,嗯,咱们这个上节课呢,做了两个版本啊,一个版本呢,是修改用户信息,那修改用户信息呢,要注意啊,在哪一页修改啊,还回到哪一页啊,另外呢,咱们还删除了用户信息,删除用户信息之前呢,需要提示用户信需用提示用户啊,是否删除这个一定要有,那咱们除了这个之外啊,咱们接下来看一看啊,这个呢。删除用户信息的啊,咱们看一看。呃,大家知道GDPC呢,采用的是一种什么机制啊,是一种自动提交机制吧。什么叫自动提交机制啊?就是只要是执行一条什么DML语句啊,DML语句是什么,是增删改呗啊增删改啊。Insert delete update啊。
01:02
增删改,这是DML语句。在GDBC里边啊,它呢,其实默认啊,默认一种情况就是只要这三个语句里面只要有一条语句执行,它就会提交一次。像这种方式呢,显然是不太合适的。比如说咱们银行转账。银行转账呢,现在呢,在呃,数据库里面有两个账户啊,有一个叫一有的是二,这里面有5000块钱。反正这里面有1万块钱啊,完了之后呢,我希望呢,把这个里边钱呀,转到这个里边。那就应该是这个减钱,这个应该加吧,那这个语句应该执行几条啊。两条吧,一条update语句去更新这个数据吧,另外一条update句是不是更新这个数据啊,那我问你啊,你想一想,其中呢,有一条阿列语句执行成功之后,你能提交吗?
02:04
你敢吗?提交是不是就意味着我们底层数据库的数据要彻底更改了?能提交吗?你比如说第一条执行成功了啊,钱是减了,减减了1万块钱了。第二个还没有加上去,你那个时候执行了一条依据,那你提交了底层改了。这个时候如果你在执行第二条语句的时候失败了呢?失败的话,你不就有问题了吗,是吧。所以GDBC默认的这种情况能用吗?啊。来来来,咱们坐下得了啊,我举个例子。我们研究一下这个思路啊,来这边呢,点右键啊,咱们新建一个Java项目,这Java项目咱们叫transaction。
03:04
好。咱们来看一下,这边呢,我给一个搜脚本吧,啊,这边呢,我建个表啊,T account啊。Job吧,先删了啊drop,然后呢C啊he account这张表,这张表呢,我来看一下啊account number,比如说账号呢,咱们就用。账号就用晚差two吧啊,晚差TWO32程度primary key啊,我就做主建了啊,然后呢,Balance马差two不能把插two了啊,给个什么number吧,行吧,这么着吧啊呃,Insert into t account这张表完事之后呢,Account number一个,还有balance一个value啊接下来这边呢,我们写上去一个账号啊杠001账户吧,然后呢,这个地方写上去啊1万吧,复制一下,接过来这是2万啊账户二啊,Commit提交Fla星front d好对吧,咱们来把这个执行一下,来这边哪个来着?
04:22
DB是吧,DB啊来OK,这个点右键new啊,这我再new一个啊,Oracle行了,就这个啊,这边写上去还是我的吧。或者是IP100吧,行吧,那这边的话写上去这是一个幺九二幺六八一点一百吧,账号1521端口啊后边的写上去北京para行了,嗯,好。行,添加我这找个大包啊,还是这个啊,进去就行了,嗯,这个里边有个DD是吧,DDBC打开啊,把这个打开就行了。
05:01
密码是吧,密码保存吧,保存密码啊测试。好了,成功了啊,Finish这边的双击打开啊,来这边连亮这边执行。啊,表块十个都在这里,行啊行了吧,两条数据吧,我现在呢,从这个账户里面向这个账户转2万,这个变成零。这个变成3万吧。这个怎么写这个。反正。程序。GTBC嘛啊GTBC。下次测一下。转账咱们简单写一下。嗯,这个转账呢,咱们在这边加一个工具啊。这改个名吧,啊改个名吧,叫这个吧。
06:07
这边也给他改改啊。这边呢,咱们来给他转账,转账的话,数据库里边数据已经有了,就是这个数据啊,转账一个,呃,工具包的话,咱们得把这个拿过来吧。找个工具类啊这个吧,放过来啊,放到这行了,那接下来打开它,我看一看能不能改一改。这个啊,告他们行了,改了啊改完了,那那还有一件事是吧,搞大包了这个啊这个这个是这个吧,你得放过来啊,怎么嗯,这个怎么放啊这个。行了,这样点右键啊,新建一个风格嘛,啊对不行不行,贴过来翻过来,翻过来之后呢,你打包吧,没倒呢啊点右键怎么倒啊。属性吧,Build pass library啊添加大包,大包你就从这加吧,啊就在这在D盘course,然后零七呃e gov,呃不是这啊是这加project,然后07GUV这个吧这个吧,这个加进去啊OK这单这种方大家会吧。
07:20
我把炸包放到这儿了啊,但是放到这不管用,是不是得搞进去啊,放到这儿行啊,就这样了啊。嗯,打完炸包了,这个U求也有了啊,咱们就可以开始了,这边有了行,咱们就开始写,怎么写呀,转正啊。就直接连出一步改了啊,Connection吧,好,就简单写一下prepared statement里头好,这边的打包,扫完包之后呢,加一个TRY,这直接写吧,行吧,Give two.get connection是吧?来,加上去一个try page好了,再加上这一个finally did you to.close吧,好,这个还是now吧,咱们这边呢,就写一个S语句啊,这个词语句应该是update t count这张表,Set balance等于分号,Where,条件是count number等于分号,是这样吧。
08:23
修改余额啊,编译啊来编译,编译完之后给括号赋值吧,来set第一个问号是在double啊,给第一个问号赋什么值啊。账户的余额说过了,那这个要转,转了2万,这个变成3万,这个变成多少零吧,这样的话这个怎么办啊,这第一个就是3万吧,3万啊,然后点上什么的set string啊,给第二个问号或什么值,是哪个值啊,哪个哪个账户啊。是这个是吧,啊这个啊,拿过来放到这儿。这是更新了,咱们更新点Q什么啊,那是吧,更新了,这个更新完了啊,这个更新吧,更新啊第一个账户吧,啊其实也就是第一个叫转入吧,转入账户啊更新转入账户行,那这样我放到这吧,嗯,更新那我问你啊,是不是还得再更新一个,你得更新谁。
09:21
是不是你这更新转出账户啊,转出账户的话,你这个你这个你这个应该应该应该变成多少钱啊零是吧,这你这变成零啊,这个账号是哪个账号啊二吧,更新更新完之后才可以行,咱们一起研究一下啊,比如说我在这加个断点。行吧,点右键啊,底层数据一个是1万,一个是2万,我再来这个看一看是不是啊,这边呢,我选中它,选中它之后呢,我就执行啊来我再执行这一个是不是一万两万啊,那我执行了啊,点右键debug是这个吗。走了啊好,大家看程序是不是执行到断点这儿了。
10:00
那我问一下程序执行到断点这儿,是不是就相当于程序只是更新了一个账户,下边账户是不是还没有更新,大家一起研究一下这数据库里的数据啊,看一看吧,行吧,我打开它,这个时候呢,我再查一下你看数据。变了没有?太危险了。你这会儿就改数据库,是不是太危险了?所以这不行啊,我说了GDBC它采用的默认机制,你只要这个DML语句执行任何一条语句,它是不是就提交数据库了,这不行,你是不是得等着这俩全都成功了,你是不是才能把底层数据库的数据才修改啊,所以这不行啊,这种方式你像这边我出现异常了。这边如果出现异常了啊,我看一看非法的我试试啊,非法结束。结束之后看看数据吧。这个数据有没有问题啊,嗯。多钱了?钱多了,Happy哈。
11:00
钱少了就哭了,钱多也不好,钱多了银行的钱不好赚是吧?那银行钱你赚了,你就这背法了,就啊背进去了。所以这个得放到一个事物里边,对吧,所以我来说一下什么是事物,这边呢,我说一下是这样,这边我点右键啊,我去新建一个文件吧,这个文件呢,我就叫transaction啊行,我说一下是这样,呃,事物什么是事物啊,事物是。事物是什么?怎么下一个定义啊,什么是事物?我先说一些术语吧,我先把术语说一下啊,一些相关的术语,嗯,什么事五是吧,来是五啊,还有什么叫。开启事务啊,提交事务,回滚事务啊,回滚,回滚事务啊,结束事物啊,结束事物啊,嗯,事物呢,是这个单词啊,Transaion开启的是begin啊,Begin,有的同学它叫star啊,不一样,Transaction嘛,然后commit啊,Commit conception这个呢叫做那个叫look back是吧?是这么写吗?Look是吧?Conception啊,还有一个呢,就是结束啊,Inception。
12:41
啊,是这样就是你。另外呢?事物是最小的工作单元啊,不可再分一个事物对应一个完整的什么业务吧,啊完整的业务这个业务啊是需要什么N条吧DML语句。
13:15
共同联合处理事物呢,是最小的工作单元,不可再分的,然后一个事物对应一个完整的业务啊,这个业务是需要N条DL语句共同联合处理的啊,这N条什么DML语句必须保证原子性啊,必须保证原子性,不可再分啊,不可再分。必须保证什么呢?同时成功啊,或者同时失败啊,或者同时失败,为了就是保证数据的安全吧,为了就是啊,保证数据的安全。
14:01
事物是最小的功能单元,不可再分,一个事物对应一个完整的业务流程,一个业务呢,通常是N条电面语句共同联合处理的,N条电面语句必须保证原子性,不可再分,必须保证同时成功,同时失败啊,所以这块要注意。事物有四个特征啊,事物包括四个特征。是吧,这个都是什么特征啊。原子性一致性,隔离性持久性对吧,原子性说明什么呀。事物是最小的工单,不可再分啊,原子集有的有的,老师这个原子可以分。原子可以分为质子和中子,那所以排列杠是吧,那这个你要问这个的话,其实是有原因的啊,当时给事物这个概念下定义的时候啊,那个宇宙中最小的最小的单元还是原子啊,那个质子和中子那个概念还没出来呢。
15:08
明白吧,那这个事物呢,早就下定义了啊,事物的概念早就出来了,他不是说为Java语言准备的啊,他也不是说为数据库准备的事物是什么呀。师傅,比如你在公司工作,老板教给你一件事,你要把这个事儿做完了。明白吧,做完了完整的一件事情啊,一个事就在银行转账,银行转账就是一个完整的事物啊,银行账户啊,转账操作,转账操作就是一个。原子啊叫原子性不可再分的啊,不可再分的必须保证转出成功,转入成功才算整个什么成功啊。整个转账成功吧,啊,整个转账业务成功结束啊,成功结束,如果中间啊,中间执行过程中出现任何异常啊,任何异常为了保证数据的安全啊,不能选择,不能选择修改数据库中的什么数据,将所有的操作记录清空吧,操作记录清空啊这个动作呢,就叫就是谁呀,回滚啊就是回滚。
16:35
回滚啊这个。事物呢,有四个特征啊,原子性,不可带分,一致性是同程同时失败,隔离性,事物和事物之间有隔离啊,也就是说,比如说我们的教室跟隔壁教室有有隔离吧,那我说话他听不见啊,为啥呀,中间这道墙比较厚啊,我一说话他能听见啊,为什么中间这道墙比较薄啊,所以隔离有隔离级别啊,有隔离级别。
17:00
隔离性,原子性,一致性,隔离性持久性,这都说过吧,是不是以前讲数据库的时候说过这个问题啊,我现在就简单提一提啊来,隔离性包括什么?四种隔离级别对不对啊?四种隔离级别哪四种啊?张读吧,啊张读。当族呢,我们就叫Di read嘛,Thirty read其实还有一个叫法啊,叫on com read啊对,叫未提交读,或者是读提读未提交啊,或者还还是叫读未提交啊,读未提交。还有呢,就是读提交吧啊读提交或者呢叫提交读吧啊提交读,反正各种叫法吧啊读提交提交读就是对方提交这个数据我才能知道啊,对方提交之后的数据可以读取到啊,这是Oracle默认的行为啊,默认的隔离级别。
18:06
行,这是Oracle默认不单独dirty read啊UN committed读提交它的英语单词呢,叫做呃,Committed read啊,Committed read。对方提交之后的数据可以读取到,这个呢,是对方未提交数据读取到了吧,对方未提交的。未提交的数据读取到了啊,一般的数据库。嗯,都比这个隔离级别高啊,一般都不会采用这种方式,就是对方你提交的数据我才能读到,读到数据是不是一定是合法的呀,在这边呢,像read什么,像repeatable啊,Repeatable啊repeatable read,还有这个这个repeatable read是什么呢?是可重复读啊,这叫可重复读取可重复读。
19:09
就是第一次啊,就是对方啊,对方提交之后的数据还是读取不到。这句话你能理解吗?对方提交之后的数据还是读取不到,第一次读取结果和第二次读取结果完全什么相同。不管时间间隔是多远啊,时间间隔多长时间啊,不管时间间隔有多久,只要当前事物未结束。它都是可以重复读取的,为什么这个隔离叫重复读呢?这边呢,我可以把这个再回顾一下啊,以前呢,都说过这个这个简单提一下吧啊circle tIgEr。
20:02
这边呢,我再打开一个啊,然后呢,我在这边呢,可以简单解释一下吧,Circle plus开你打开这个窗口呢,比如说我们来看一看默认的隔离级别select星from t account这张表里面这个嘛,是吧?Select形from t,什么account吧,那最后这个数据呢,接下来delete from什么delete啊,From t account是吧?Where条件是什么?Account number等于。杠001行吧,啊,这边删掉啊,提交这边我还不提交啊,能查出来吗?嗯,是不是还有啊,当你提交之后的数据是不是把文件改了,你这会是不是才能发现呢?才起作用了吗?这种隔离级别哪个级别。二级吧,是不是二级啊叫读提交啊读提交。或者提交图。提交之后的数据我才能读到,你要是不提交,我根本读不到,是这意思吧,这是一种缺省行为啊。
21:07
一般呢,都都不是这个啊,这个呢,一般关系型数据库的都不做这一点,一般都是读题叫最低的可重复读啊,是repeatable read repeatable read啊这个这是买circle的缺省行为啊,这是circle数据库的缺省行为,缺省行为是这个行了,我看一看啊,这个叫什么?退出去吧,来这个退出去啊好了,那么接下来land登上去,来这个登上去,登上去之后呢,一起看一看啊,登上去之后看一看吧,比如说我现在呢,设置设置啊,Set transaction isolation level isolation level啊。来,我写上去这个简单了解一下啊,好,大家看报错了,他说什么设置事物的隔离级别只支持两个选项,一个选项叫silver level,还有一个叫read commit read committed吧。
22:00
这句话什么意思呢?就是说其实还有一个隔离级别,就是四级啊,这个比较序列化。啊,序列话筒叫there liable read,这是这是最高的隔离级别,这种隔离级别。表示大家访问数据库的时候,数据库的时候必须排队,明白吗?必须排队啊,其中我在操作的时候你不能操作,或者说你操作的时候我不能操作,这种隔离级别是最高的啊,一般都不会用的。一般都不会有,你想一想达到这个级别,这个级别是不是就已经达到了。是这意思啊,达到这个级别的时候,这个级别已经达到了,大家看Oracle只支持哪个非级别啊,Oracle只支持只支持。哪个这两个。
23:04
表面说是两个,其实是还是四个啊,你想一想,它支持这个。就相当于已经支持这个了吧,啊行了,这个简单看一看就行了,来我设置一下啊,这边改一改吧,这个名字改成什么。我改成这个行吗?行不行,接过来啊,那这样的话15除以级就行了,设置15隔离级别,是这个隔离级别,大家看啊,Select新from什么T,下面见什么好看的吧,这边几下记录啊一条吧,来让什么T什么好看的吧,好大家看一看啊,这边呢,我把这个再执行一下啊,大家注意观察一下,这个是不是也有一对啊,来delete啊,Delete from t account这张表我就先我就直接全部删除吧,嗯,我提交了啊,大家看看这个数据还有吗?这数据是不是没了没了。但是你看这个数据能读到吗?没事没事。
24:03
但是大家知道什么叫可重复读吗?可重复读理解成什么叫可重复读?就是说第一次读取结果跟第二次读取结果,还有第三次读取结果,只要这个窗口不关,从早上九点到晚上九点钟,这个结果永远是这个结果。这个隔离级别表示墙更厚。对方你操作了,你就提交了,你提交你的,我不管我第一次读取结果还是一样的。这叫可以重复读取吗?这种隔离级别是更高的。啊,其实比如说像我们银行总账吧,举个例子啊,银行总账。银行总账这个利率就用用到了啊。啊,银行总账,比如说我们银行总账呢,可能是需要底层执行一条,简单说一下啊,可能这个词汇语句比较多,Select语句呢,可能要开始从三点钟执行啊,执行到下午五点钟,需要执行两个小时,这条select语句才能统计完。有没有可能啊,有可能啊,这个统计时间是不是有可能会很长啊啊。
25:01
那你想一想,最后那个业务员到五点钟了,这个结果是查完了,最后那个账目出来了,那个账目应该记三点钟的账目还是五点的账目。你要记住三点到五点两个小时之内有人存款跟取款吗?有人存款取款吗?有了,有人是不是修改数据库啊,那这样的话,这个数据是是不是就不准了,所以这个时候在执行这个总账的这个语句的时候,是不是可以设置事物的隔离级别为最高级别,那这样的话,比如说你在三点到五点钟,你对这个数据库里面数据进行更新了,更新但是你对我有影响吗?没有我三点钟的结果,我只要开始执行这个style语句,到最后五点钟,就算是隔了好几个小时,最后查出的结果是不是还是三点钟的结果。那这样的话,我们业务员最后记得这个账目是几点钟账目啊,三点钟账目就行了,这种隔离级别是有用的,但是我说一下很少用这个座位了解吧啊,事物的隔离级别,其实你就呃重点作为加法成序员啊,把这个事物呢理解一下,然后事物的四个特性理一下,隔离性呢,简单要知道里边有有四个隔离级别啊,其实用的比较多是哪个级别啊,二级营二级用的是最多的,这个二级用的最多的。
26:10
啊,这个是article缺省的啊,这个是my circle缺省的,简单了解一下,Article里这是S和read committee的这两个隔离级别啊,简单了解一下行了,那么再看啊,呃,事物什么时候事物开始,什么时候标志的啊,标志着事物的开启。什么时候标志事的结束呢?啊。什么时候标志着事物的结束?记住啊,只要一条什么DML语句干什么?开始执行标志着什么事物的开启?明白吧,什么标志事物的结束?只要执行了commit语句或者什么robot语句啊,表示标志着啊,标志着事物的结束,Commit表示成功的结束啊。
27:16
Robot表示失败的结束啊,事物结束的,事物只要结束啊,D面缓存,Oracle数据库中的DM面缓存就会全部清空啊,全部清空,这要知道,其实呢,你这个DML语句在操作的时候都是操作的Oracle数据库它底层的缓存。明白吧,你真正commit的时候呢,它才会将缓存里的数据和那个底层硬盘的文件进行一次同步。如果你要是选择roll,其实整个过程就和硬盘的文件就没有交互,直接将你的历史操作全部清空了,缓存清空掉了,明白吧?所以这边呢,什么时候标志事物的开启,什么标志事物的结束,开启是店面语句,执行就表示开启什么时候结束啊,Commit密或者说外表只要执行就会结束了啊,但是呢,这两个都叫结束,都会清空所有的缓存。
28:14
可是成功了啊,Robot是失败了,就这个意思。所以呢,大家呢,要把所有的操作放在一个事物中怎么做来这边还有吧,还得写一个叫什么GDBCGDBC默认采用的提交,呃,事务机制是什么?事务机制是只要什么,只要一条DML语句执行,则提交吧,则提交啊这种方式显然啊不符合现实的什么业务逻辑,因为现实的业务逻辑啊,现实的业务逻辑不可能。啊,或者是业务逻辑大部分嘛,都是什么多条DML语句干什么共同干什么联合完成的,对不对啊,所以我们需要啊修改什么DDBC的。
29:10
提交机制吧,啊提交机制,所以修改啊,我肯定得修改。这种方式显然不符合。现实啊。因为现实的业务逻辑大部分都是多条界面共同联合完成的,所以我们需要修改机制的提提交机制啊,将什么将自动提交修改为什么。手动提交了,手动提交啊,这个提交什么时候执行,那得看什么。那得看业务什么时候结束吧,业务什么时候啊结束,这个我说了不算啊,这个具体得得看你的具体业务,所以这边的话怎么怎么写啊,是不是你只要update倍和这个update放到一块就行了,怎么写,虽然那个。
30:11
就在这呗,写一句话叫什么connection.set out to commit,叫什么false对吧,关闭什么手动,呃,关闭什么自动提交吧,这边的话咱们就失误结束了吧,结束之后干什么?手动提交吧,自动提交怎么提交啊,点二叫commit吧啊这就行了,嗯,Commit好,那这边遇见异常了怎么办呀,回滚吧啊如果connection要是不等于什么,那样的话,是不是把这connection卷轴back呀,回滚啊,这边加一个穿加上回滚啊,这叫回滚。下面呢,一定要注意啊,需要结束事物吧啊,结束事物怎么结束啊,一定要记住啊,Connection set of,改成再改成true。再改成数啊,改回去一定要改回去啊,你想一想为什么要改回去啊,嗯。
31:10
为什么最后要改回去啊?我给你让关了完之后,我这执行完了,执行完之后我手动给他提了,嗯,遇到异常我也回滚了,完了之后,最后结束的时候,我给我又我又给他回回回复了。为,为什么这么做呀?好,我给大家讲一讲啊,注意听啊,是因为这个事儿,将来我们要不要用连接池。那我问你啊,连接池的意思就是说这个池里边放了很多连接对象,用过的连接对象有没有可能被别人再次重复利用?就是你用了完了之后呢,用完之后你把这再放到池里边了,接接接下来你同事啊,或者是你,你另外一个人操作这个系统是吧,操作系统之后你你干什么呀?你拿了一个什么。连接连接对象,那这个连接对象有没有可能是你原先用过的?
32:03
那我问你啊,我们在系统中有没有地方是依靠的自动提交。我们的系统在某一些位置上有没有依靠自动提交这种机制?我们的系统在其他的模块中有没有依靠数据库的自动提交机制?所以你要不要改回去啊。你这个连接对象,你想一想,假如说这个没了会导致什么后果呀,这个没了你是不是就像那个自动提交机制给它关了,关了之后呢,这个连接对象又放到连接池里边,连接池里面拿出这个连接对象,发现这个连接对象自动提交关了,那么其他系统是不是就不能用了,大家想一想,为什么我今天到这个时候才讲这个事物啊。你发现一个问题了吗?我们这个一级UV项目,在这个在这个功能之前。我们这个还有这个,嗯,还有这个,这两个底层的DML语句,只要执行几条,这个业务就完成了。
33:05
但是这个delete就不行了,Delete现在执行的这个D面语句不是一条。它是不是多条接边语句啊,所以我才讲事物啊,所以大家想想其他的应用程序中,是不是还是希望你支持自动提交的,你像这个吧,插入吧,这个插入是不是希望你这是自动提交啊,所以我们希望大家能够理解啊,这跟什么有关系啊,跟连接池有关,所以希望大家来了给它关了,走的时候一定要带个人干什么。恢复明白吧,如果你不恢复不负责啊,这个不负责,这个你不恢复的,别人可能还还还还在用吧,所以还指着这个自动提交的吧,还指望自动提交呢,你说你给他关了,关了之后这这这不行啊,所以事物呢,有这么几个啊开启事务。来开启事,来这边叫什么?提交事物来,这叫什么回滚事务,这叫什么结束事务,明白吧,四个阶段啊,这边的。
34:05
一定要让他恢复一下。行了,咱们再来测一下啊,把这个选中再来执行底层账数的变了吧,还是一万两万吧,接下来我看一看我在哪加个断点呀。我在这加个端点啊,在这吧,我在这加个断点吧,啊还在这,接下来呢,我就在这呢,执行一下这个客户端程序啊哪呢这个是吧,这个啊来这个点右键咱们直接提bug啊,进来之后呢,我们看一下来这个数据库里面数据变了吗?啊,不用恢复了啊,就直接。点它就行了,都不是这个这个啊,点这个吧,还。没变。数据是不是没变啊,没变啊没事的,他等到结束的时候才会发生改变的啊,所以这边结束吧,啊结束了之后,你看一看这个数据呢,应该变了啊,来这边打开这边在执行啊。是吧,变了。
35:01
你中间你说发生异常,来我发生个异常啊,在这吧,Throw new throw new,一个run time吧,Exception行不行,嗯,这这写上啊,出现异常了,来写上if,嗯,别写这个换一个吧啊换一个in的点,看看最近哪一了ABC这个会不会出现异常,会吧,这个时候我我我把数据恢复一下啊,一个是你看又恢复了吧。一个是叫什么一万两万吧,其实我把这断点删了啊,删了之后就执行了,点右键直接执行报异常了,异常就是这个异常嘛,是吧,那你想一想,现在是不是这条语句上面已经执行二倍的了,下边这会没有执行到到这的了,那这个时候你看数据没有问题啊,你把数据查一下来,选中执行,你看数据还是一万人啊,没有问题。行吧,这是这个事物啊,给大家说一说。行了,这块呢,事物呢,我就说到这,这个就不再说了啊,简单的提了提。
36:04
嗯,行了,这个就说到这看一下啊,行吧,这边我看一下这个怎么写啊,给改吧怎么改。这要干什么?开启事务吧,然后呢,在这干什么?提交事务吧,来在这干什么?回滚事务吧,啊来回滚事务之后呢,在这干什么?结束事务吧,啊结束啊事务行就这样,这就可以了,好了,那咱们提供几个方法吧,啊不要在这写了,来咱们提供打开谁UDB啊来打开DB,然后DB里边呢,写几个方法来我要写几个呢,Public sta wide。叫做begin transaction啊,Connectionaction需要需要这个对象吗?需要这个对象,好,我们这叫开启事,把这个复制一下。
37:14
再来一个方法叫什么提交吧,还有一个叫什么方法来着,Look back没写错吧,再来啊,还有一个是in的吧,In的啊来这边呢,我就开启的话,我就直接判断一下,如果connection要是不等于什么,不等于none吗?啊不等于none好了,这边呢,我把它复制一下来,不等于none。行了,只要不等于那样的话,咱们就在这干什么connection.set out to complete false了,嗯,这边呢,异常就抛出去就行了啊,因为外边有人接吧啊有人接来这边呢,咱们提交吧,点什么可避吧啊提交就行了,来这边的话,外边也有有人接啊call就行了,这边没人接就拆开了啊connection点什么roll back go back来加一个check开好这边我们加一个什么拆开是吧,Connect set up clean吧,False啊,To吧啊to啊好,加上去个拆开好就这样,那这样的话,这边我写上注释啊,是这个什么开启事物,这边是一个什么提交物来这边是一个回滚啊事误来再来一个方法,这叫什么叫结束事误吧,好了,那这边写完之后,那这边写了怎么写啊,BPU就点什么begin。
38:48
啊,下边呢,Dbu就点什么什来下边呢是dbu就点什么,下边呢是BU就点in啊这四个呢都写上。
39:00
开启提交回滚结束。明白吧,这个开启跟那个提交的中间那个到底扩多大呢,由你自己说了算啊,这个跟业务有关系,银行有银行的业务,保险保险业务,证券的证券业务啊,这块的业务不一样,所以呢语句呢也不同。行吧,这是事物啊,行,这个例子呢,我就写到这了啊,这个跟刚才还没有什么,没有什么区别啊。呃,效果还是一样的好,那么这边呢,保证事物就行了,好,这边呢,我写上。删除用户信息,第二个知识点就是关于什么事物啊,关于事物开启提交。回。还有一个是结束啊,行了,这个14版本就。
我来说两句