concurrency - 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 锁,但我并没有真正找到适合我的情况的解决方案。
感谢您的任何提示!
解决方案
推荐阅读
- android - 如何截取具有相机预览和文本视图的布局的屏幕截图?
- amazon-web-services - 从链接下载后将文件上传到 s3
- java - 放置请求在 Spring Web 中给出错误 401/403
- python - 在 arcgisimage 上绘制位置点
- kubernetes - 需要设置自定义 Kubernetes 日志记录策略
- javascript - 如何使用 aws lambda 和 nodejs 创建和发送 csv?
- google-chrome-extension - chrome 扩展 - 我如何等待 chrome.runtime 功能?
- notepad++ - 用文本替换 Notepad++ 中的空行(仅限 LF)
- arduino - 警告:在 { } [-Wnarrowing] 内将 'tempo' 从 'int' 缩小到 'unsigned char' 的转换是我的代码
- node.js - 在mongodb中按月份和日期分组并显示列表