Moh*_*sal 42 sql oracle primary-key
我在Oracle中有一个表,其中包含以下Schema:
City_ID Name State Country BuildTime Time
Run Code Online (Sandbox Code Playgroud)
当我声明表时,我的主键是两个City_ID并且BuildTime现在我想将主键更改为三列:
City_ID BuildTime Time
Run Code Online (Sandbox Code Playgroud)
如何更改主键?
Pet*_*ang 69
假设您的表名是city和您现有的主键pk_city,您应该能够执行以下操作:
ALTER TABLE city
DROP CONSTRAINT pk_city;
ALTER TABLE city
ADD CONSTRAINT pk_city PRIMARY KEY (city_id, buildtime, time);
Run Code Online (Sandbox Code Playgroud)
确保没有记录其中time的NULL,否则你将无法重新创建该约束.
Ton*_*ews 38
您将需要删除并重新创建主键,如下所示:
alter table my_table drop constraint my_pk;
alter table my_table add constraint my_pk primary key (city_id, buildtime, time);
Run Code Online (Sandbox Code Playgroud)
但是,如果有其他表具有引用此主键的外键,则需要先删除它们,执行上述操作,然后使用新列列表重新创建外键.
删除现有主键的替代语法(例如,如果您不知道约束名称):
alter table my_table drop primary key;
Run Code Online (Sandbox Code Playgroud)
有时,当我们执行这些步骤时:
alter table my_table drop constraint my_pk;
alter table my_table add constraint my_pk primary key (city_id, buildtime, time);
Run Code Online (Sandbox Code Playgroud)
最后一条语句失败
ORA-00955“名称已被现有对象使用”
Oracle 通常会创建一个具有相同名称 my_pk 的唯一索引。在这种情况下,您可以删除唯一索引或根据约束是否仍然相关重命名它。
您可以将主键约束和唯一索引的删除组合到单个 sql 语句中:
alter table my_table drop constraint my_pk drop index;
Run Code Online (Sandbox Code Playgroud)
检查这个: ORA-00955“名称已被现有对象使用”
| 归档时间: |
|
| 查看次数: |
143185 次 |
| 最近记录: |