1

我有一个三列的表,[ 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:
4

2 回答 2

3

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

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

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

于 2013-09-19T08:54:55.953 回答
0

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

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

有关详细信息,请查看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) - 无效

于 2013-09-19T06:31:13.330 回答