首页

数据库事务隔离特性之同一事务执行CURD数据一致性验证

标签:事务隔离     发布时间:2023-04-22   

一、前言

1)结论1 - 在同一个事务中,对同一条数据进行先插入,后查询,再更新,再查询,都是可行的。

2)结论2 - 事务隔离级别是限制不同事务,对于同一个事务没有意义。

3)结论3)spring的事务的隔离级别是建立在数据库的事务支持基础上(如选择数据库引擎不支持事务,配置不生效) - MySQL,MariaDB,PostgreSQL都支持四种隔离级别,Oracle的事务隔离级别就只有三种:读已提交、串行化、只读(Read-Only),增加了只读级别,去掉了读未提交和可重复读两个级别。

二、结论示例验证

如需运行调试该示例请下载相关demo完整项目,下面

1)先插入再查询,保证同步查询结果

41_2023-04-22_18-57-16副本.jpg

@Override@b@@Transactional(rollbackFor = Exception.class)@b@public String insertAfterSelect(DemoFirst demoFirst){@b@    //1.先插入@b@    demoFirstMapper.insert(demoFirst);@b@    //2.查询结果@b@    DemoFirst selectResult=demoFirstMapper.selectOne(Wrappers.<DemoFirst>query().lambda()@b@            .eq(DemoFirst::getCode, demoFirst.getCode())@b@            .eq(DemoFirst::getName, demoFirst.getName()));@b@@b@    System.out.println("selectResult="+ JSON.toJSONString(selectResult));@b@@b@    return JSON.toJSONString(selectResult);@b@}

2)接口调用配置

42_2023-04-22_18-57-55副本.jpg

@GetMapping("/insertAfterSelect")@b@public String insertAfterSelect() {@b@    //@b@    DemoFirst demoFirst = new DemoFirst();@b@    demoFirst.setCode(UUID.randomUUID().toString());@b@    demoFirst.setName(UUID.randomUUID().toString());@b@@b@    return gameFirstService.insertAfterSelect(demoFirst);@b@}

3)测试地址:http://localhost:8003/insertAfterSelect测试

31_2023-04-22_19-43-49副本.jpg