[SQL] 2 열 조합에 SQL 고유 제한 조건
SQL2 열 조합에 SQL 고유 제한 조건
당신은 두 개의 열 두 값의 조합에 고유 제한 조건을 만들 수있는 방법.
의미
column1 column2
2 1
수 없도록 제약을 찾고
column1 column2
1 2
해결법
-
==============================
1.데이터베이스 인덱스의 표현을 허용하는 경우이 (ANSI SQL)과 같은 작업을 수행 할 수 있습니다 :
데이터베이스 인덱스의 표현을 허용하는 경우이 (ANSI SQL)과 같은 작업을 수행 할 수 있습니다 :
CREATE UNIQUE INDEX on your_table (least(column1, column2) , greatest(column1, column2));
이 고유 인덱스가 아닌 고유 제한 조건 참고. 대부분의 DBMS에 대한 유일한 차이점은 외래 키의 대상으로 고유 인덱스를 가질 수 없다는 것입니다,하지만, 그렇지 않은 경우는 동일한 목적을 제공합니다.
당신의 DBMS는 적어도 () 또는 최대가없는 경우 () 당신은 CASE 식을 사용하는 것을 대체 할 수있다 :
create unique index on your_table (case column1 < column2 then column1 else column2 end, case column2 > column1 then column2 else column1 end));
-
==============================
2.문서에 보면, ORACLE SGBD이 발견 :
문서에 보면, ORACLE SGBD이 발견 :
CREATE TABLE b( b1 INT, b2 INT, CONSTRAINT bu1 UNIQUE (b1, b2) USING INDEX (create unique index bi on b(b1, b2)), CONSTRAINT bu2 UNIQUE (b2, b1) USING INDEX bi);
페이지 ORACLE 문서의 "제약 조건과 인덱스 관련 지정"장.
이 도움말 홉.
-
==============================
3.2 열에서 고유 한 제약 만이 개 정확한 값 (그들 허용되는 스위칭) 삽입 방지 :
2 열에서 고유 한 제약 만이 개 정확한 값 (그들 허용되는 스위칭) 삽입 방지 :
이 (ORACLE)과 같은 트리거가 필요합니다 그래서 :
CREATE TRIGGER trig1 BEFORE INSERT ON TAB REFERENCING NEW AS NEW FOR EACH ROW DECLARE FOUND NUMBER; BEGIN SELECT COUNT(1) into FOUND FROM TAB WHERE (COLUMN1=:NEW.column2 AND COLUMN2=:NEW.column1) OR (COLUMN1=:NEW.column1 AND COLUMN2=:NEW.column2); IF FOUND>0 THEN raise_application_error (-20001,'INSERT not allowed'); END IF; END trig1;
경고 : 구문 확인하지.
from https://stackoverflow.com/questions/10159411/sql-unique-constraint-on-a-2-columns-combination by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] 오라클에서 스크립트를 통해 삽입하는 빠른 방법? (0) | 2020.06.17 |
---|---|
[SQL] 어떻게 외국 언어와 MySQL의 쿼리를 선택하려면? (0) | 2020.06.17 |
[SQL] 대량으로 PostgreSQL을 만 새로운 행을 삽입하는 방법 (0) | 2020.06.17 |
[SQL] SQL 업데이트는 MS Access에서 비애 - 작업이 업데이트 가능한 쿼리를 사용해야합니다 (0) | 2020.06.17 |
[SQL] 어떻게 오라클의 기존 테이블에 (또는 GET)는 DDL 스크립트를 생성 할 수 있습니까? I가이 하이브에서 그들을 다시 작성 (0) | 2020.06.17 |