当前位置: 首页 > 面试题库 >

使用ibatis检索新插入的行的ID时的并发问题

赫连黎昕
2023-03-14
问题内容

我正在使用iBatis / Java和Postgres 8.3。当我在ibatis中插入时,我需要返回ID。
我使用下表描述我的问题:通过运行create语句自动生成
CREATE TABLE sometable ( id serial NOT NULL, somefield VARCHAR(10) );
Sequence sometable_id_seq

目前,我使用以下sql映射:

<insert id="insertValue" parameterClass="string" >
 INSERT INTO sometable ( somefield ) VALUES ( #value# );
 <selectKey keyProperty="id" resultClass="int">
  SELECT last_value AS id FROM sometable_id_seq
 </selectKey>
</insert>

看来这是检索新插入的id的ibatis方法。Ibatis首先运行INSERT语句,然后向序列询问最后一个ID。
我怀疑这是否可以与许多并发插入一起使用。

这会引起问题吗?像返回错误插入的ID?


问题答案:

这绝对是错误的。用:

select currval('sometable_id_seq')

或更好:

INSERT INTO sometable ( somefield ) VALUES ( #value# ) returning id

这将返回您插入的ID。



 类似资料:
  • 问题内容: 我正在使用Laravel 4,我需要在MySQL表中插入一些行,并且需要找回插入的ID。 对于单行,我可以使用,但是它不支持多行。如果我至少能像普通的MySQL一样检索第一行的ID,就足以找出其他的ID。 问题答案: 根据用户Xrymz的建议,返回第一个。 根据Schemaapi 接受数组 所以你必须能够 就是说,如果使用MySQL,则可以由此检索第一个ID并计算其余的ID。还有一个功

  • 问题内容: 美好的一天, 我愿意检索Mysql中新插入的行的id值。 我知道有mysqli_insert_id函数,但是: 我无法指定表格 如果同时进行查询,则可能有检索错误ID的风险。 我正在使用node.js MySQL 我不想冒着查询最高ID的风险,因为有很多查询,这可能会给我一个错误的查询… (我的ID列是自动递增的) 问题答案: https://github.com/mysqljs/my

  • 我想从我的学生表中检索最后插入的id并传递到视图。但我不知道怎么做?我使用以下代码在表中插入数据。 有人能帮帮我吗?

  • 问题内容: 我有一个查询要在表中插入一行,该表有一个名为ID的字段,该字段在列上使用AUTO_INCREMENT填充。我需要为下一个功能获取此值,但是当我运行以下命令时,即使实际值不为0,它也总是返回0: 根据我的理解,这应该返回ID列,但每次仅返回0。有任何想法吗? 编辑: 当我跑步时: 我得到: 问题答案: [编辑:在引用last_insert_id()之前添加了“选择”] 插入后运行“ ”怎

  • 好的,这个问题不是关于如何返回ID,而是更像是如何跳过它...我有一种情况,我使用last_insert_id()获取最后插入的行的id,但如果没有插入行,我希望得到一个零。问题如下: I INSERT...UPDATE一些记录:由于行是新插入的,因此返回所有ID 然后重复这个过程:这一次不返回ID。耶!这正是我想要的 我更改了一个列值并重复该过程:但现在返回了我更改了列值的行的ID。这让我很生气

  • 在下面的代码中,我得到。我读到,也可以直接从获取最后插入的行id。在我的代码中,我把空插入改为长,并尝试了许多其他的东西,就像我在互联网上找到的例子一样,但是每次我都会出错。你想给我提供一个代码/解决方案,从@插入获取行/用户ID吗? 实体 存储库 查看模型 片段/活动