On TransactionIsolation(1)MySql

参见https://blog.csdn.net/kamputer/article/details/109292200connection方法修改如下,主要是讲隔离级别设置为Connection.TRANSACTION_READ_UNCOMMITTED

private static Connection connection() {
        try {
            Class.forName(com.mysql.cj.jdbc.Driver.class.getName());
            Connection out= DriverManager.getConnection("jdbc:mysql://172.23.47.6:3306/qbit","root","mima");
            out.setTransactionIsolation(Connection.TRANSACTION_READ_UNCOMMITTED);
            return out;
        }catch (Exception e){
            throw new RuntimeException(e);
        }
    }

运行后打印结果如下

update transaction_table set curr_value=1 where id=valueA
	valueA | 1
	valueB | 0
update transaction_table set curr_value=2 where id=valueA
	valueA | 2
	valueB | 0
update transaction_table set curr_value=3 where id=valueA
	valueA | 3
	valueB | 0
update transaction_table set curr_value=4 where id=valueA
	valueA | 4
	valueB | 0
update transaction_table set curr_value=1 where id=valueB
	valueA | 4
	valueB | 1
update transaction_table set curr_value=2 where id=valueB
	valueA | 4
	valueB | 2
update transaction_table set curr_value=3 where id=valueB
	valueA | 4
	valueB | 3
update transaction_table set curr_value=4 where id=valueB
	valueA | 4
	valueB | 4

可以看出来write的每个操作都能被read读取出来,这并不奇怪。

将隔离级别设置为Connection.TRANSACTION_READ_COMMITTED

update transaction_table set curr_value=1 where id=valueA
	valueA | 0
	valueB | 0
update transaction_table set curr_value=2 where id=valueA
	valueA | 0
	valueB | 0
update transaction_table set curr_value=3 where id=valueA
	valueA | 0
	valueB | 0
update transaction_table set curr_value=4 where id=valueA
	valueA | 0
	valueB | 0
update transaction_table set curr_value=1 where id=valueB
	valueA | 4
	valueB | 0
update transaction_table set curr_value=2 where id=valueB
	valueA | 4
	valueB | 0
update transaction_table set curr_value=3 where id=valueB
	valueA | 4
	valueB | 0
update transaction_table set curr_value=4 where id=valueB
	valueA | 4
	valueB | 0

如果将隔离级别修改为TRANSACTION_REPEATABLE_READ,结果和上面一致,真是让人吃惊,说好的repeatable read呢。即使使用了TRANSACTION_SERIALIZABLE也会读取到数据。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值