创建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账户中的事务回滚。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)