我有一个包含三列的表,[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:
答案 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) - 无效