首页 > 解决方案 > DB2 Select 插入并发问题

问题描述

我是 DB2 新手,遇到了这个问题:2+ 个独立(测试)进程正在将新的测试数据记录创建到同一个表中。为此,我必须从该表中获取最后一个现有(最大)ID,将其递增,然后将其用于新记录。由于某些原因,最小的 ID 必须为 1000。没有属于 ID 列的序列,也没有任何其他自动机制,但它当然必须是唯一的。

我写了这个 SQL 语句:

SELECT ID FROM FINAL TABLE(
  INSERT INTO table_x (ID,NAME)
  VALUES((SELECT COALESCE(MAX_ID, 1000) MAX_ID FROM (
    SELECT * FROM (SELECT MAX(ID) AS MAX_ID FROM table_x))
  )+1,'Ben')
)

该语句有效,但它发生多次运行此语句时仍然存在并发问题,因为相同的 ID。

显然我必须做更多的事情。我猜表锁定可能是一个解决方案,或者可能还有其他最佳实践?我发现了一些关于 NEXTVAL 的文章,但它只适用于序列。

是的,我找到了这个DB2 INSERT INTO ... SELECT 锁,但我并没有真正找到适合我的情况的解决方案。

感谢您的任何提示!

标签: concurrencyinsertdb2locking

解决方案


推荐阅读