33
我有一个表中的Oracle其中有以下模式:更改主键
City_ID Name State Country BuildTime Time
当我宣布表我的主键既City_ID
和BuildTime
,但现在我想改变主键的三列:
City_ID BuildTime Time
如何更改主键?
我有一个表中的Oracle其中有以下模式:更改主键
City_ID Name State Country BuildTime Time
当我宣布表我的主键既City_ID
和BuildTime
,但现在我想改变主键的三列:
City_ID BuildTime Time
如何更改主键?
假设你的表名是city
和您现有的主键是pk_city
,你应该能够做到以下几点:
ALTER TABLE city
DROP CONSTRAINT pk_city;
ALTER TABLE city
ADD CONSTRAINT pk_city PRIMARY KEY (city_id, buildtime, time);
确保没有记录,其中time
是NULL
,否则你赢了无法重新创建约束条件。
你将需要删除并重新创建这样的主键:
alter table my_table drop constraint my_pk;
alter table my_table add constraint my_pk primary key (city_id, buildtime, time);
但是,如果有与引用该主键的外键与其它表,则需要先删除这些,执行上述操作,然后使用新列列表重新创建外键。
一个可选的语法来删除现有主键(例如,如果你不知道的约束名):
alter table my_table drop primary key;
我的主键是city_id和构建时的组合 所以我应该在的地方写my_pk – 2010-02-22 11:57:24
我正在使用“my_pk”作为主键约束的名称。你应该知道约束的名字是什么,但是如果你不知道,你可以使用“alter table my_table drop primary key”。代替。 – 2010-02-22 12:05:18
如果使用CASCADE子句将其删除,则不需要删除引用my_table.my_pk的相关外键。另外,只要删除约束可能会使你周围的索引可能或不需要;使用KEEP | DROP INDEX子句适当。 奇怪的是,所有这些都记录在Oracle数据库SQL参考中。 http://download.oracle.com/docs/cd/B19306_01/server.102/b14200/statements_3001.htm#i2103845 – 2010-02-22 14:38:36