各位:
unique索引如果是组合索引,那么允许其中的某个字段为空么?
unique索引如果是组合索引,那么允许其中的某个字段为空么?
解决方案 »
- 数据锁定得问题
- sql疑问?
- 简单问题, select * from table1 where name='张三' '李四' ' 王二麻子'
- 请问怎样把insert/delete/update三个触发写成一个触发(合在一起,在线等待)
- 如何编程知道Oracle某个用户下的序列、触发器、过程名称
- 如何在oracle数据库中将11g的dmp导入到10g的数据库中
- VB如何操作Oracle数据库的触发器~~~~~
- 问个问题散点分吧,为什么ORACLE的中文名字叫甲骨文啊?
- Oracle是不是可以实现SQL的所有功能?
- 如何建立建立一个数据库(我的是在redhat7.2下的oracle8.17数据库),能不能给个例子
- SQL难题,困惑中,期待高手献招
- 在plsql中,使用绑定变量的方法除了动态sql外,还有别的方式吗
2 (a number(10),
3 b number(10),
4 c number(10),
5 d number(10));
Table created
SQL> create unique index t_test_index1 on t_test_index(a,b,c);
Index created
SQL> insert into t_test_index values(null,1,2,3);
1 row inserted
SQL> insert into t_test_index values(null,1,2,3);
insert into t_test_index values(null,1,2,3)
ORA-00001: 违反唯一约束条件 (TDS.T_TEST_INDEX1)
SQL>
---------- --------------------
1
但是由于是unique,那么就必须任何两条记录唯一,可以一条记录的某字段为空,其他记录如果另外的组合unique一样,那么为空的那个字段就不能再是空的了,只要保证唯一就行!
SQL> truncate table t_test_index;
truncate table t_test_index
ORA-00054: 资源正忙, 但指定以 NOWAIT 方式获取资源
SQL> truncate table t_test_index;
Table truncated
SQL> insert into t_test_index values(null,1,2,3);
1 row inserted
SQL> insert into t_test_index values(null,1,2,3);
insert into t_test_index values(null,1,2,3)
ORA-00001: 违反唯一约束条件 (TDS.T_TEST_INDEX1)
SQL> insert into t_test_index values(null,null,2,3);
1 row inserted
SQL> insert into t_test_index values(null,null,2,3);
insert into t_test_index values(null,null,2,3)
ORA-00001: 违反唯一约束条件 (TDS.T_TEST_INDEX1)
SQL> insert into t_test_index values(null,null,null,3);
1 row inserted
SQL> insert into t_test_index values(null,null,null,3);
1 row inserted
SQL>
但非空字段(唯一索引组合字段其他非空字段)不能重复(NULL不写入索引,所以只要写入索引部分唯一即可)
如果是单一字段唯一索引,也可以多NULL(原理相同)要注意的是,如果通过改索引检索,可能会导致全表扫描
2条 记录
1 2 null
1 2 null
如果你是ORACLE ,你打算通过什么算法对他们进行定位。