向 Oracle 中的现有表添加一个自动增量主键

我想添加一个新的自动增量主列到一个现有的表,其中有数据。我该怎么做?

我首先添加了一个列,然后尝试添加一个序列后,我失去了如何插入和使该列作为主键。

148878 次浏览

如果有了列和序列,则首先需要为所有现有行填充一个新键。假设您不关心将哪个键分配给哪行

UPDATE table_name
SET new_pk_column = sequence_name.nextval;

完成这一步之后,您就可以创建主键约束(这里假设不存在现有的主键约束,或者您已经删除了现有的主键约束)

ALTER TABLE table_name
ADD CONSTRAINT pk_table_name PRIMARY KEY( new_pk_column )

如果要自动生成密钥,则需要添加一个触发器

CREATE TRIGGER trigger_name
BEFORE INSERT ON table_name
FOR EACH ROW
BEGIN
:new.new_pk_column := sequence_name.nextval;
END;

如果使用的是旧版本的 Oracle,那么语法会稍微麻烦一些

CREATE TRIGGER trigger_name
BEFORE INSERT ON table_name
FOR EACH ROW
BEGIN
SELECT sequence_name.nextval
INTO :new.new_pk_column
FROM dual;
END;

Oracle OTN 论坛上截下来的

使用 alter 表添加列,例如:

alter table tableName add(columnName NUMBER);

然后创建一个序列:

CREATE SEQUENCE SEQ_ID
START WITH 1
INCREMENT BY 1
MAXVALUE 99999999
MINVALUE 1
NOCYCLE;

以及使用 update在列中插入如下值

UPDATE tableName SET columnName = seq_test_id.NEXTVAL

假设您的表名为 t1,而您的主键名为 id
首先,创建序列:

create sequence t1_seq start with 1 increment by 1 nomaxvalue;

然后创建一个在插入时递增的触发器:

create trigger t1_trigger
before insert on t1
for each row
begin
select t1_seq.nextval into :new.id from dual;
end;

可以使用 Oracle 数据建模器创建自动递增的代理项。

步骤1。-创建一个关系图

您可以首先创建逻辑图和工程师来创建关系图,也可以直接创建关系图。

添加自动递增 PK 所需的实体(表) ,选择 PK 的类型为 Integer。

步骤2。-编辑 PK 列属性

获取 PK 列的属性。 您可以双击列名或单击“属性”按钮。

“列属性”对话框。

选择“常规”选项卡(第一次选择默认选项)。 然后选中“自动增量”和“标识列”复选框。

步骤3-其他资料

可以通过选择“自动增量”选项卡指定与自动增量相关的其他信息。

  • 递增
  • 最低价值
  • Max Value
  • 自行车
  • 关闭缓存
  • 肃静
  • 序列名
  • 触发器名称
  • 生成触发器

通常最好提到序列名称,这样它在 PL/SQL 中会很有用。

单击“确定(应用)到列属性”对话框。

单击“确定(应用)到表属性”对话框。

表出现在关系图中。