如何添加复合主键?

时间:2013-09-19 06:19:24

标签: oracle composite-primary-key

我有一个包含三列的表,[Id,QTY,Date]。在这三个中,两列[id和date]应该被设置为主键,因为我需要从该表中逐个获取记录到参考中。

要插入此表的数据是

101,10,NULL    
101,20,201220    
101,7,201440    
102,5,null    
102,8,201352    

日期为yyyyww格式

如果将两列定义为具有null值的重复主键,如何将其定义为复制主键?

alter table abc add constraint pk primary key (ID, DATE);    

如果我尝试更改表格,则会出现错误

错误报告:

SQL Error: ORA-01449: column contains NULL values; cannot alter to NOT NULL
01449. 00000 -  "column contains NULL values; cannot alter to NOT NULL"
*Cause:    
*Action:

2 个答案:

答案 0 :(得分:3)

使用表级约束,您可以使用此查询

alter table your_table add constraint pkc_Name primary key (column1, column2) 

但首先您需要声明列NOT NULL。主键的所有部分都必须为NOT NULL

答案 1 :(得分:0)

您的表的列名是ID,它仍然是null且非唯一,怎么可能。如果它是其他表的主键,请尝试为此表添加代理键列并将其设为主键。

对于复合主键,它应该在列组合中具有至少一个非空值(对于每一行)。并且列的组合在所有情况下都必须是唯一的。

有关详细信息,请查看http://docs.oracle.com/cd/B10500_01/server.920/a96524/c22integ.htm

更正 - 如果复合主键由3列组成,则没有列(3个中)可以保存NULL值。并且这3列的组合必须是唯一的。 例如。 (1,2,2-)         (1,2,1)         (2,2,1)         (1,2,2) - 无效