提交数据里面有and就报错_mysql数据库事务隔离1

没什么特别的就想实际看看是不是和书上说的一样不一样

  • READ-UNCOMMITTED(读取未提交): 最低的隔离级别,允许读取尚未提交的数据变更,可能会导致脏读、幻读或不可重复读
  • READ-COMMITTED(读取已提交): 允许读取并发事务已经提交的数据,可以阻止脏读,但是幻读或不可重复读仍有可能发生
  • REPEATABLE-READ(可重复读): 对同一字段的多次读取结果都是一致的,除非数据是被本身事务自己所修改,可以阻止脏读和不可重复读,但幻读仍有可能发生
  • SERIALIZABLE(可串行化): 最高的隔离级别,完全服从ACID的隔离级别。所有的事务依次逐个执行,这样事务之间就完全不可能产生干扰,也就是说,该级别可以防止脏读、不可重复读以及幻读

abe64b006d661ff23505ce4fbc86ee00.png

新建终端A,查看数据库的版本,虽然你安装的时候就知道,但有时候长久不用,需要确认一下

select 

db7841e72db61ad2828afc52550e90a4.png

查看数据库事务级别

mysql 

406b8a8635d8835158cb9bb310f2cf5b.png

先看一下有哪些数据库,也可以使用navicat看

show 

ba504c97f652900bace18a1d0239ccc2.png

然后选择一个数据库,再选择里面的一个数据表,可能有某些博客直接起手就是数据表,然后你就发现自己报错了,就是因为没有选择数据库。可以按照下面的顺序执行,这里选择了course表。

use 

f7232e2f07c76df4c18152f3a29a4b5a.png

读未提交

开启事务

start 

44fd76236c8a505d684056ddac039769.png

更新表里的一个数据,记得在更新数据之前一定要先使用上面那句,不然会默认自动提交,然后你就会看到明明mysql是可重复读的但是却出现了脏读的情况。

update 

9cb61e4f453b95a1aa12817e77bdbc2a.png

然后在当前终端页面,如果是Mac可以使用command + N得到一个新的终端页面

在给新终端B设置事务级别之前还是一样的一定要先选一个数据库

use 

默认mysql隔离级别情况下,B端是看不到更新后的数据的

34ecc34753b9199b54ca2740612f3671.png

在设置了读为提交的事务隔离级别后可以看到更新后的数据了,也就是出现了脏读情况

set 

a9a996cc8fe91f6297f732821e52369d.png

如果你不相信你还可以把B终端的事务等级重新设置一下

set 

76594a9006eaba8b4fa0bafbac52af00.png

可以看到设置以后,因为A还没有提交事务,所以B终端上看不到改变后的结果了。

读已提交

在A端使用提交事务的命令后

commit

在之前设置的B端的读已提交的情况下可以看到更新后的数据了

set 

9d7ffe1986a6c2d6939f06725a82329d.png

可重复读

将A端和B端都设置为可重复读,

set session transaction isolation level repeatable read;

在A端插入新数据,

insert into course values('0005','生物','0005');

这时候A端会显示

5726f1064f1292e12f21692fb5659e6b.png

然后再查询B端

92e3f9eed10f121a01bbe70a5d0af275.png

可以看到并没有显示

内容太多,分成两篇,准备中。。。

参考博客:

https://github.com/Snailclimb/JavaGuide/blob/master/docs/database/Redis/redis-all.md

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值