java - 我应该为读取语句使用哪个事务隔离级别?
问题描述
我需要在新插入的行中插入一条新记录,使用 city_id 列的 MAX 值加一。因此,如果 MAX 值为 14,则下一个插入行的 city_id 列值应为 15。
在我的代码中,我将获取 city_id 列的最大值,将其递增,然后将其保存。我正在为该代码使用弹簧事务。
private void saveCityDetail(final CityBO googleCityBO) {
if (googleCityBO.getId() == null) {
final Long cityId = cityMasterRepository.findMaxCityId();
googleCityBO.setCityId(cityId + 1);
googleCityBO.setActive(true);
}
cityMasterRepository.save(cityEntityBOMapper.convertCityBOToCityEntity(googleCityBO));
}
我想知道应该使用隔离级别,以便事务可以读取最大计数并获取读取锁,以便其他事务应该等待该事务完成。
解决方案
SERIALIZABLE
是唯一保证“其他事务应等待此事务完成”的保证。
如果事务中采取的唯一动作是读取一行并更新同一行,则不会发生死锁,并且不需要正常的重试循环。
推荐阅读
- spring-boot - 在 Spring Boot 应用程序中集成测试 Jms 侦听器/消费者的策略应该是什么?
- javascript - 承诺解决后按文件执行唯一操作
- automation - 将 CSV 文件从多台 PC 链接到我的 PowerBI
- kubernetes - 如何在 Kubernetes 的角色绑定中将命名空间传递给主题
- sql-server - MSSQL 查询通过划分未来 12 个月来推迟收入
- rust - Rust 中的盒装函数工厂(高阶函数)导致“调用表达式需要函数”
- python - CPython 和 PyPy 十进制运算性能
- blazor - 预渲染 blazor webassembly 网站 .net 标准 2.1 失败
- python - 在 Mayavi 中对多个标量场进行体积切片
- postgresql - 以下场景会导致 PostgreSQL DB 死锁吗?