UNIQUE约束要求,对于列或列组合而言,表中每行的值必须是不同的。 UNIQUE约束的怪异之处在于,可以在键列输入NULL值。在键列中,可能有任意数量的包含NULL值得行。 UNIQUE约束通过索引来实施。在定义UNIQUE约束时,Oracle将查看键列上的索引,如果不存在,就创建一个。 索引(称为B*树索引)的结构不包含NULL值,正因为如此,才允许出现多个包含null的行。 选择 WHERE key_column is NULL不使用索引(因为索引不包含NULL),因此总是导致扫描整个表。所以说组合唯一约束的列可以全为空或某几个为空,列是否能为空是由not null约束决定的。SQL> create table c (a number(10), b varchar(10),c varchar(10));Table created.SQL> alter table c add constraint c_uc unique(a,b,c);Table altered.SQL> insert into c values(1,null,null);1 row created.SQL> insert into c values(null,null,'c');1 row created.SQL> insert into c values(null,null,null);1 row created.
或者只用asset1+asset2作为主键
至于唯一确定看数据是否唯一便可
如果希望可以为空,可以用组合唯一约束
UNIQUE约束的怪异之处在于,可以在键列输入NULL值。在键列中,可能有任意数量的包含NULL值得行。
UNIQUE约束通过索引来实施。在定义UNIQUE约束时,Oracle将查看键列上的索引,如果不存在,就创建一个。
索引(称为B*树索引)的结构不包含NULL值,正因为如此,才允许出现多个包含null的行。
选择 WHERE key_column is NULL不使用索引(因为索引不包含NULL),因此总是导致扫描整个表。所以说组合唯一约束的列可以全为空或某几个为空,列是否能为空是由not null约束决定的。SQL> create table c (a number(10), b varchar(10),c varchar(10));Table created.SQL> alter table c add constraint c_uc unique(a,b,c);Table altered.SQL> insert into c values(1,null,null);1 row created.SQL> insert into c values(null,null,'c');1 row created.SQL> insert into c values(null,null,null);1 row created.