alf*_*sin 49
假设您的表被调用t1
并且您的主键被调用id
首先,创建序列:
create sequence t1_seq start with 1 increment by 1 nomaxvalue;
Run Code Online (Sandbox Code Playgroud)
然后创建一个在插入时递增的触发器:
create trigger t1_trigger
before insert on t1
for each row
begin
select t1_seq.nextval into :new.id from dual;
end;
Run Code Online (Sandbox Code Playgroud)
Jus*_*ave 28
如果您有列和序列,则首先需要为所有现有行填充新键.假设您不关心将哪个键分配给哪一行
UPDATE table_name
SET new_pk_column = sequence_name.nextval;
Run Code Online (Sandbox Code Playgroud)
完成后,您可以创建主键约束(这假定没有现有的主键约束或您已经删除了现有的主键约束)
ALTER TABLE table_name
ADD CONSTRAINT pk_table_name PRIMARY KEY( new_pk_column )
Run Code Online (Sandbox Code Playgroud)
如果要自动生成密钥,则需要添加触发器
CREATE TRIGGER trigger_name
BEFORE INSERT ON table_name
FOR EACH ROW
BEGIN
:new.new_pk_column := sequence_name.nextval;
END;
Run Code Online (Sandbox Code Playgroud)
如果您使用的是较旧版本的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;
Run Code Online (Sandbox Code Playgroud)
小智 17
使用alter table添加列,例如:
alter table tableName add(columnName NUMBER);
Run Code Online (Sandbox Code Playgroud)
然后创建一个序列:
CREATE SEQUENCE SEQ_ID
START WITH 1
INCREMENT BY 1
MAXVALUE 99999999
MINVALUE 1
NOCYCLE;
Run Code Online (Sandbox Code Playgroud)
并且,用于update
在列中插入值,如下所示
UPDATE tableName SET columnName = seq_test_id.NEXTVAL
Run Code Online (Sandbox Code Playgroud)
小智 5
您可以使用Oracle Data Modeler创建自动递增代理键.
步骤1. - 创建关系图
您可以先创建逻辑图和工程师来创建关系图,也可以直接创建关系图.
添加需要自动增加PK的实体(表),选择PK的类型为Integer.
步骤2. - 编辑PK列属性
获取PK列的属性.您可以双击列的名称或单击"属性"按钮.
出现"列属性"对话框.
选择"常规"选项卡(第一次选择"默认选择").然后选中"自动增量"和"标识列"复选框.
第3步 - 附加信息
可以通过选择"自动增量"选项卡来指定与自动增量相关的附加信息.
提及序列名称通常是个好主意,因此它在PL/SQL中很有用.
单击"确定"(应用)到"列属性"对话框.
单击"确定(应用)"到"表属性"对话框.
表出现在关系图中.
归档时间: |
|
查看次数: |
133088 次 |
最近记录: |