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 插入,你会发现它也会被覆盖...
我对自己的现状很迷茫:
我在 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 插入,你会发现它也会被覆盖...