在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中它会很有用。
单击确定(应用)到列属性对话框。
单击确定(应用)到表格属性对话框。
表格出现在关系图中。