这个问题在这里已有答案:
我想将一个新的自动增量主列添加到具有数据的现有表中 . 我怎么做?
我首先添加了一个列,然后尝试添加一个序列,之后我失去了如何插入并将该列作为主键 .
假设您的表名为 t1 ,您的主键名为 id首先,创建序列:
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;
如果您有列和序列,则首先需要为所有现有行填充新键 . 假设您不关心将哪个键分配给哪一行
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 forums
使用alter table添加列,例如:
alter table tableName add(columnName NUMBER);
然后创建一个序列:
CREATE SEQUENCE SEQ_ID START WITH 1 INCREMENT BY 1 MAXVALUE 99999999 MINVALUE 1 NOCYCLE;
并且,使用 update 在列中插入值,如下所示
update
UPDATE tableName SET columnName = seq_test_id.NEXTVAL
您可以使用 Oracle Data Modeler 创建自动递增代理键 .
Step 1. - Create a Relational Diagram
您可以先创建逻辑图和工程师来创建关系图,也可以直接创建关系图 .
添加需要具有自动递增PK的实体(表),选择PK的类型作为整数 .
Step 2. - Edit PK Column Property
获取PK列的属性 . 您可以双击列的名称或单击“属性”按钮 .
出现“列属性”对话框 .
选择“常规”选项卡(第一次选择“默认选择”) . 然后选中“自动增量”和“标识列”复选框 .
Step 3. - Additional Information
可以通过选择“自动增量”选项卡来指定与自动增量相关的附加信息 .
开始
增量
最小值
最大值
周期
禁用缓存
订单
序列名称
触发器名称
生成触发器
提及序列名称通常是个好主意,因此它在PL / SQL中很有用 .
单击“确定(应用)”到“列属性”对话框 .
单击“确定(应用)”到“表属性”对话框 .
表出现在关系图中 .
4 回答
假设您的表名为
t1
,您的主键名为id
首先,创建序列:
然后创建一个在插入时递增的触发器:
如果您有列和序列,则首先需要为所有现有行填充新键 . 假设您不关心将哪个键分配给哪一行
完成后,您可以创建主键约束(这假定没有现有的主键约束或您已经删除了现有的主键约束)
如果要自动生成密钥,则需要添加触发器
如果您使用的是较旧版本的Oracle,则语法会更麻烦
来自Oracle OTN forums
使用alter table添加列,例如:
然后创建一个序列:
并且,使用
update
在列中插入值,如下所示您可以使用 Oracle Data Modeler 创建自动递增代理键 .
Step 1. - Create a Relational Diagram
您可以先创建逻辑图和工程师来创建关系图,也可以直接创建关系图 .
添加需要具有自动递增PK的实体(表),选择PK的类型作为整数 .
Step 2. - Edit PK Column Property
获取PK列的属性 . 您可以双击列的名称或单击“属性”按钮 .
出现“列属性”对话框 .
选择“常规”选项卡(第一次选择“默认选择”) . 然后选中“自动增量”和“标识列”复选框 .
Step 3. - Additional Information
可以通过选择“自动增量”选项卡来指定与自动增量相关的附加信息 .
开始
增量
最小值
最大值
周期
禁用缓存
订单
序列名称
触发器名称
生成触发器
提及序列名称通常是个好主意,因此它在PL / SQL中很有用 .
单击“确定(应用)”到“列属性”对话框 .
单击“确定(应用)”到“表属性”对话框 .
表出现在关系图中 .