从一个 table 中插入 max + 1 在两个不同的 table 中从 java 批量更新
Insert max + 1 from one table in two different table in batch update from java
我要求在 2 table 秒内自动增加值并具有引用关系。我的要求是在两个 table 中插入数据:-
Table A = Rowid ,其他列
Table B = Rowid , 其他列
我需要在两个 table 中插入来自不同方法的数据。
目前,我采用了这种方法:-
一个。查询 Table A 中的最大值并加 1。
b.使用批量更新在步骤 1 中获得的值在两个 table 中插入数据。
但是,方法的缺陷是如果两个 users/threads 同时调用此方法,它们最终可能具有相同的值,我将在 Table A 和 Table B 上得到引用完整性错误具有相同行 ID 的 2 行。
我可以同步我的方法来避免这种情况,但是由于一些其他功能,我有多个不同的方法做同样的事情。
执行此操作的理想方法是使用自动生成的列,但 DBA 不允许这样做。此外,两个 table 之间的引用完整性需要由应用程序维护,DBA 不允许实际约束。
我在 java 端使用 Spring jdbctemplate,在数据库端使用 DB2。但是,问题与 poth 无关。
SELECT MAX()+1
不是为大量并发事务创建序列的可接受方式。
DBA 拒绝使用 ISOLATION LEVEL
、IDENTITY
或 SEQUENCE
对象等 DB2 的并发特性是不幸的。
有可以使用的应用程序解决方法:
将第一个语句包装在 FINAL TABLE
中以便 return 插入的值,包括为 TableA.rowid
.
生成的 MAX()+1
使用准备语句的return键:
PreparedStatement prepareStatement(String sql, int autoGeneratedKeys)
PreparedStatement prepareStatement(String sql, String[] columnNames)
然后值 returned 应用到 TableB.rowid
我要求在 2 table 秒内自动增加值并具有引用关系。我的要求是在两个 table 中插入数据:- Table A = Rowid ,其他列 Table B = Rowid , 其他列 我需要在两个 table 中插入来自不同方法的数据。 目前,我采用了这种方法:- 一个。查询 Table A 中的最大值并加 1。 b.使用批量更新在步骤 1 中获得的值在两个 table 中插入数据。 但是,方法的缺陷是如果两个 users/threads 同时调用此方法,它们最终可能具有相同的值,我将在 Table A 和 Table B 上得到引用完整性错误具有相同行 ID 的 2 行。
我可以同步我的方法来避免这种情况,但是由于一些其他功能,我有多个不同的方法做同样的事情。
执行此操作的理想方法是使用自动生成的列,但 DBA 不允许这样做。此外,两个 table 之间的引用完整性需要由应用程序维护,DBA 不允许实际约束。
我在 java 端使用 Spring jdbctemplate,在数据库端使用 DB2。但是,问题与 poth 无关。
SELECT MAX()+1
不是为大量并发事务创建序列的可接受方式。
DBA 拒绝使用 ISOLATION LEVEL
、IDENTITY
或 SEQUENCE
对象等 DB2 的并发特性是不幸的。
有可以使用的应用程序解决方法:
将第一个语句包装在 FINAL TABLE
中以便 return 插入的值,包括为 TableA.rowid
.
使用准备语句的return键:
PreparedStatement prepareStatement(String sql, int autoGeneratedKeys)
PreparedStatement prepareStatement(String sql, String[] columnNames)
然后值 returned 应用到 TableB.rowid