【发布时间】:2020-05-21 10:16:51
【问题描述】:
当两个用户同时启动一个进程时,我在 oracle 10g 数据库中的查询出现问题。 此查询正在插入另一个表中的卷数据。
我试图简化示例:
表格结构:
表 1 VAL1 | VAL2
表 2 ID | VAL1 | VAL2
查询:
插入Table2(id、VAL1、VAL2)
选择 t2.id + rownum, t1.VAL1, t1.VAL2
from Table1 t1, (select max(id) as id from table2) t2
问题描述:
User1 启动进程,查询将插入 50000 条 id 从 1 到 50000 的记录
User2 同时启动进程,select max(id) as id from table2 将不会返回预期值 50000,因为 user1 插入的行尚未提交,因此系统将尝试插入带有相同的身份。
似乎 oracle 不允许像 sql server 或 DB2 这样的脏读,有没有办法允许从未提交的行读取?或其他替代方案?
【问题讨论】:
标签: sql database oracle nolock