【无标题】

【无标题】,第1张

创建chapter06 数据库:

进入chapter06数据库:

创建account表并插入相应的字段:

给account表添加相应的数据:

 查看account表:

退出数据库重新登录查询account表:

可以看出,转账 *** 作并没有成功,因为没有提交事务就退出数据库了,由此可以得出事务中的语句不能自动提交。 

 下面为事务提交并且退出数据库,再登录查看,可以看出成功了

 三、事务的回滚
开启一个事务,通过update语句将a账户的100元转给b账户,并查询结果:

a账户成功给b账户转账100元钱,此时a账户不能给b账户转账,由于事务还没有提交,就可以将事务回滚,如下是回滚后查询的结果: 

  

 四、事务的隔离级别
1、(read uncommitted)脏读
开启a,b两个账户(数据库)

设置b账户的隔离级别并查看

 

 为了证明脏读的情况,首先在b账户中开启一个事务,并在该事务中查询当前账户的余额信息:

 

在a账户中开启一个事务,并在当前窗口中执行转账功能,并查询b账户:

 

从查询结果可以看出,a账户已经成功给b账户转账100元钱,这是由于b账户的事务隔离级别较低,因此读取了a账户中还没提交的内容,出现脏读的情况。上述情况演示完,之后,还需将a账户的事务回滚,将b账户中的事务提交。

 

为了防止脏读现象的发生,需要将b账户的隔离级别设置为read commited(读提交),该级别可以避免脏读。

为了说明没有出现脏读现象,首先b账户开启一个事务,并在该事务中查询各账户的余额信息:

 

 

a账户重新开启一个事务,并实现转账功能

通过比对两次结果可以发现,b账户在同一事务中的查询结果是一致的,并没有查询到a账户中未提交的内容,因此可以说明read committed隔离级别可以避免脏读,最后分别将a账户的事务和b账户中的事务回滚。 

 

 

 

 

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/723307.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-04-26
下一篇 2022-04-26

发表评论

登录后才能评论

评论列表(0条)

保存