Oracle 去掉联合主键中的一列

需求:现在有张表中是联合主键,但是现在要改成只有一个字段是主键。

解决方法:先删除这张表的联合主键,再重新创建这张表的主键,sql测试脚本如下

--创建测试表
create table test_wxh(
     t_id number(16) not null,
     t_name varchar2(256),
     t_my_id number(16) not null
)

--添加联合主键
alter table test_wxh
  add constraint PK_test_wxh primary key (t_id, t_my_id);
 
--表中插入数据 
 select * from test_wxh for update
 
 --去掉联合主键,再添加一个主键
 ALTER TABLE test_wxh drop constraint PK_test_wxh;
 
 --再添加一个主键
  alter table test_wxh
  add constraint PK_test_wxh primary key (t_id);



### Oracle 11g 中为现有表添加主键约束的方法 在 Oracle 11g 数据库中,可以通过 `ALTER TABLE` 语句为主键约束添加到已经存在的表上。此方法允许用户定义一个或多个列作为主键,并确保这些列中的值具有唯一性和非空性。 以下是具体实现方式: #### 使用 ALTER TABLE 添加主键约束 要向现有的表中添加主键约束,可以使用如下语法结构: ```sql ALTER TABLE table_name ADD CONSTRAINT constraint_name PRIMARY KEY (column_name); ``` 其中: - **table_name** 是目标表的名称。 - **constraint_name** 是新创建的主键约束的名称,建议采用有意义的名字以便于维护和识别。 - **column_name** 是被指定为主键一个或者多个列名(如果涉及多列,则需要用逗号分隔开)。 例如,在名为 `Employees` 的表中增加基于单列 `EmployeeID` 的主键约束,命令可写成这样[^1]: ```sql ALTER TABLE Employees ADD CONSTRAINT EMPLOYEE_PK PRIMARY KEY (EmployeeID); ``` 对于复合主键的情况——即由两个以上字段共同组成主键的情形下,只需简单列举所有参与构成主键的字段即可。比如下面的例子展示了如何把 `OrderDetails` 表里的两栏组合起来设置成联合主键[^3]: ```sql ALTER TABLE OrderDetails ADD CONSTRAINT ORDERDETAILS_COMPOSITE_PK PRIMARY KEY (OrderId, ProductId); ``` 需要注意的是,当尝试给已有数据记录存在重复值或者是 NULL 值的列设定主键时会失败,因为这违反了主键的基本属性要求。所以在实际操作前应该先确认相关列的数据状态满足条件再执行上述指令。 ### 注意事项 - 如果需要移除之前建立好的主键关系则需要用到 DROP 子句形式,就像例子展示的一样:“alter table Books_1 drop constraint BOOK_PK;" 这条语句成功去除了书籍信息表上的书目编号这一级联索引关联。 - 主键一旦确立之后便不可轻易修改其配置参数除非重新构建整个架构体系;因此规划初期就要充分考虑业务逻辑需求以减少后期调整带来的麻烦成本。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值