oracle 在 table 中插入了不正确的主键

oracle incorrect primary key inserted in the table

我对自己的现状很迷茫:

我在 rails 上的 ruby 应用程序正在生成以下查询:

插入 "MEMBER_ROLES" ("ID", "NAME", "ORG_ID") 值 (:a1, :a2, :a3) [["id", 55], ["name", "test6"], ["org_id", "2"]]

查询似乎有效,我可以在我的数据库中看到上述记录 table 除了 'id' 字段未设置为“55”而是“56”。

每次插入都会发生这种情况。实际插入的主键总是比上面的插入语句看起来多1。

我不确定这是否与我的 table 的创建方式有关?

CREATE TABLE member_roles 
(
  id  NUMBER(38,0) primary key,
  name VARCHAR2(200) not NULL,
  org_id VARCHAR2(200) not NULL,
  created_at DATE default sysdate not null,
  updated_at DATE default sysdate not null
)


CREATE SEQUENCE MEMBER_ROLES_SEQ;

set define off;
CREATE OR REPLACE TRIGGER member_roles_bir 
BEFORE INSERT ON MEMBER_ROLES 
FOR EACH ROW

BEGIN
  SELECT MEMBER_ROLES_SEQ.NEXTVAL
  INTO   :new.id
  FROM   dual;
END;

如何获取用于插入的 ID?你从序列中得到它吗? 触发器会用下一个序列值覆盖您的 ID。

你可以尝试用 id=-99 插入,你会发现它也会被覆盖...