Oracle 테이블을 사용하고 있고 4 개의 열에 대해 고유 제한 조건을 만들었습니다. 제약 조건 내의 이들 열에 NULL이 포함될 수 있습니까?다중 열에 대한 고유 제한 조건
25
A
답변
41
열이 NOT NULL로 지정되어 있지 않으면 열에 NULL을 사용할 수 있습니다. (모든 열이 NULL을하지 않는 한 동일한 열 두 개의 세트가 허용되지 않습니다) 당신은 그러나 NULL을 단 하나 개의 인스턴스를 저장할 수있을 것입니다 :
SQL> CREATE TABLE t (id1 NUMBER, id2 NUMBER);
Table created
SQL> ALTER TABLE t ADD CONSTRAINT u_t UNIQUE (id1, id2);
Table altered
SQL> INSERT INTO t VALUES (1, NULL);
1 row inserted
SQL> INSERT INTO t VALUES (1, NULL);
INSERT INTO t VALUES (1, NULL)
ORA-00001: unique constraint (VNZ.U_T) violated
SQL> /* you can insert two sets of NULL, NULL however */
SQL> INSERT INTO t VALUES (NULL, NULL);
1 row inserted
SQL> INSERT INTO t VALUES (NULL, NULL);
1 row inserted
2
두 개의 null은 Oracle에서 같지 않은 것으로 간주되므로이 열에는 null이 포함될 수 있습니다.
5
예, Oracle은 UNIQUE 제약 조건에 NULL 내용이 포함 된 열을 포함 할 수 있지만 PRIMARY KEY 제약 조건에는 NULL 값을 포함하는 열을 포함 할 수 없습니다. (편집 : "nullable columns ..."였지만, 아래의 예는 사실이 아님을 나타냅니다. PK의 열은 null 허용으로 정의 될 수 있지만 NULL을 포함 할 수 없습니다.)
UNIQUE 제약 조건과 동일한 열이있는 PRIMARY KEY 제약 조건
SQL> create table stest (col1 integer not null, col2 integer null);
Table created.
SQL> alter table stest add constraint stest_uq unique (col1, col2);
Table altered.
SQL> insert into stest values (1, 3);
1 row created.
SQL> insert into stest values (1, null);
1 row created.
SQL> insert into stest values (1, null);
insert into stest values (1, null)
*
ERROR at line 1:
ORA-00001: unique constraint (SUSAN_INT.STEST_UQ) violated
SQL> insert into stest values (2, null);
1 row created.
SQL> commit;
Commit complete.
SQL> select * from stest;
COL1 COL2
---------- ----------
1 3
1
2
SQL> alter table stest add constraint stest_pk PRIMARY KEY (col1, col2);
alter table stest add constraint stest_pk PRIMARY KEY (col1, col2)
*
ERROR at line 1:
ORA-01449: column contains NULL values; cannot alter to NOT NULL
SQL> truncate table stest;
Table truncated.
SQL> alter table stest add constraint stest_pk PRIMARY KEY (col1, col2);
alter table stest add constraint stest_pk PRIMARY KEY (col1, col2)
*
ERROR at line 1:
ORA-02261: such unique or primary key already exists in the table
SQL> alter table stest drop constraint stest_uq;
Table altered.
SQL> alter table stest add constraint stest_pk PRIMARY KEY (col1, col2);
Table altered.
관련 문제
- 1. : 다중 열 고유 제한 조건
- 2. 은/고유 제한 조건
- 3. Mysql과 인덱스의 두 열에 대한 고유 제한
- 4. 하나의 점검 제한 조건 또는 다중 점검 제한 조건?
- 5. JPA 고유 제한 조건 유효성 검증
- 6. GAE의 데이터 수준에서의 고유 제한 조건
- 7. CakePHP join 모델의 고유 제한 조건
- 8. oracle에서 참조 된 열에 대한 고유 제한 조건 설정 10g xe
- 9. 고유 제한 조건 -이 열은 현재 고유 값을 갖지 않습니다.
- 10. NHibernate 다 대일 및 고유 제한 조건 위반
- 11. JPA의 고유 제한 사항 검사
- 12. sql 고유 레코드에 대한 제한
- 13. 고유 키의 필드 부분을 갱신하는 동안 Hibernate가 고유 제한 조건 위반 예외를 던졌습니다
- 14. MySQL - 고유 한 열에 대한 dayname() 그룹화
- 15. MySql : 중복 열에 대한 제한 설정
- 16. 열에 고유 제한 조건을 작성하면 자동으로 색인이 작성됩니까?
- 17. 각 열에 고유 표백
- 18. 함수 기반 인덱스를 사용하여 지연된 고유 제한 조건?
- 19. Grails의 : 중복 및 고유 제한 조건 확인은 여기
- 20. JPA 고유 제한 조건 위반을 처리하는 방법은 무엇입니까?
- 21. LINQ - 다중 조건 기반 조건
- 22. 고유 제한 vs 고유 인덱스
- 23. 구현하는 복잡한 점검 제한 조건
- 24. 병합 원인 고유 조건 위반
- 25. where와 함께 오라클의 고유 제약 조건
- 26. Mnesia의 고유 제한
- 27. CakePHP, 다중 선택 상자에 대한 복합/다중 찾기 조건 설정
- 28. MySQL의 고유 제한 사항
- 29. 데이터 주석이있는 고유 제한
- 30. XPath 및 다중 조건
그것은 나에게 보인다는에 대한 답을 찾기 위해 아주 사소한 것을 테스트와 함께. 그렇게하는 데 1 분 이상 걸릴 수 있습니까? –
예 - 당신 말이 맞습니다. 그러나 Vincent, Amber 및 Shoover가 게시 한 답변에서 다른 정보를 배웠습니다. – Nicks