【发布时间】:2015-05-14 12:24:01
【问题描述】:
我有一个带有唯一 id 列的 oracle 表。当我向表中插入数据时,我会增加最后一个 id。
insert into my_table vlaues((select max(id) from my_table), 'etc', 'etc');
可以有多个进程同时写入这个表。
自动提交是on。
除了id之外,该表没有任何其他唯一列。
当我在表中插入一条记录时,有没有办法在我插入记录后获取记录得到的id 值?
如我所见,如果我在插入后使用 select max(id) from my_table,我可能无法获得插入语句中使用的 id,因为其他人可能在我发出 select 之前插入了另一条记录。
【问题讨论】:
-
这不是拥有自动递增 ID 的安全方法 - 同时访问会导致重复 ID(可能导致唯一键违规)。
-
这个问题不仅仅是关于自动递增。插入 reord 后,我需要获取自动递增的值
-
如果你使用 PL/SQL 插入,那么你可以使用 返回子句 见stackoverflow.com/questions/28472118/…