在oracle的现有表中添加一个自动递增主键

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

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

假设你的表被称为t1 ,你的主键被称为id
首先,创build序列:

 create sequence t1_seq start with 1 increment by 1 nomaxvalue; 

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

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

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

 UPDATE table_name SET new_pk_column = sequence_name.nextval; 

一旦完成,您可以创build主键约束(假定没有现有的主键约束,或者您已经删除了现有的主键约束)

 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 table添加列,例如:

 alter table tableName add(columnName NUMBER); 

然后创build一个序列:

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

并且,使用update来像这样在列中插入值

 UPDATE tableName SET columnName = seq_test_id.NEXTVAL 

您可以使用Oracle Data Modeler来创build自动递增代理键。

第1步 – 创build一个关系图

您可以先创build一个逻辑图和工程师来创build关系图,或者您可以直接创build关系图。

添加需要自动递增PK的实体(表),selectPK的types为Integer。

第2步 – 编辑PK列属性

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

列属性对话框出现。

select常规选项卡(首次默认select)。 然后select“自动递增”和“标识列”checkbox。

第3步 – 其他信息

有关自动增量的其他信息可以通过select“自动增量”选项卡来指定。

  • 从…开始
  • 递增
  • 最小值
  • 最大值
  • 周期
  • 禁用caching
  • 订购
  • 序列名称
  • 触发器名称
  • 生成触发器

提到序列名称通常是一个好主意,所以在PL / SQL中它会很有用。

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

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

表格出现在关系图中。