레이블이 #UniqueKey인 게시물을 표시합니다. 모든 게시물 표시
레이블이 #UniqueKey인 게시물을 표시합니다. 모든 게시물 표시

2021년 11월 6일 토요일

오라클 테이블, 고유 키 제약조건(Unique Key Constraints)

 

오라클 테이블, 고유 키 제약조건(Unique Key Constraints)

 

컬럼의 값은 유일해야 한다는 제약조건입니다. 최대 32개 이내 컬럼에 정의할 수 있으며 NULL값은 항상 유일하므로 입력이 가능합니다. 컬럼 레벨, 테이블 레벨(주로 복합 컬럼으로 제약조건을 만드는 경우) 모두에서 정의할 수 있습니다. 고유 키 제약조건이 지정되면 제약조건과 같은 이름의 인덱스가 별도의 저장공간에 자동으로 생성됩니다.


테이블을 생성할 때 UNIQUE 제약조건을 기술해보고 제약조건의 이름도 부여하거나 부여하지 않고 테이블을 생성해 보겠습니다. 이 제약조건이 있을 때 중복된 데이터가 입력되는지, NULL을 허용하는 컬럼에 NULL을 INSERT구문의 VALUES절에 기술해서 입력할 수 있습니다. 또한 오라클에서 UNIQUE 제약조건을 기술할 때 별도의 영역에 해당 컬럼의 데이터를 정렬하여 인덱스를 생성한다는 것 역시 확인해 보겠습니다.

실습


UNIQUE 제약조건을 걸어 테이블을 생성 후 중복된 데이터를 입력해 봅니다.


id, name, tel 컬럼을 가지는 T2 테이블을 생성하면서 tel 컬럼에 UNIQUE 제약조건을 걸어서 데이터 입력을 테스트 하세요.


CREATE TABLE t2 (

    id       NUMBER CONSTRAINT pk_t2 PRIMARY KEY,

    name VARCHAR2(100) NOT NULL,

    tel      VARCHAR2(20)   UNIQUE

);


INSERT INTO t2 VALUES  (1, '1길동', '010-1234-0000');

INSERT INTO t2 VALUES  (2, '2길동', '010-1234-0000');


<실행결과>

ORA-00001: 무결성 제약조건(SCOTT.SYS_C007508)에 위배됩니다.



전화번호는 고유해야 하는데 이미 같은 전화번호가 있어서 오류 메시지가 발생했습니다.

실습


컬럼에 NOT NULL 제약조건이 걸려 있지 않다면 NULL을 입력할 수 있습니다. NULL값은 고유하기 때문입니다.


tel 컬럼에 NULL값을 입력하세요.


INSERT INTO t2 VALUES  (2, '2길동', NULL);

INSERT INTO t2 VALUES  (3, '3길동', NULL);


실습


UNIQUE 제약조건이 정의되면 오라클은 자동으로 별도 영역에 해당 컬럼을 인덱싱해둬 검색에서 좋은 성능을 냅니다. USER_INDEXES 딕셔너리 뷰에서 사용자가 생성한 인덱스를 확인 할 수 있습니다.


USER_INDEXES에서 T2 테이블에 생성되어 있는 인덱스를 확인합시다.


SELECT INDEX_NAME, TABLE_NAME 

FROM    USER_INDEXES

WHERE TABLE_NAME = 'T2';


<실행결과>

 

INDEX_NAME

TABLE_NAME

1

PK_T2

T2

2

SYS_C007508

T2


UNIQUE 제약조건을 기술할 때 별도로 이름을 주지않아 오라클에서 자동으로 SYS_C007508을 이름으로 부여했습니다. 인덱스는 활성화 또는 비활성화, 삭제 및 재생성 작업이 자주 일어나므로 이름을 부여해 주어야 관리하기 편합니다.

실습


UNIQUE 제약조건의 이름을 주고 테이블을 생성 합니다.


T2 테이블을 삭제 후 다시 생성하는데, UNIQUE 제약조건의 이름을 기술하여 생성하세요.


CREATE TABLE T2 (

    ID         NUMBER CONSTRAINT PK_T2 PRIMARY KEY,

    NAME  VARCHAR2(100) NOT NULL,

    TEL      VARCHAR2(20) CONSTRAINTS UK_T2_TEL UNIQUE

);


SELECT INDEX_NAME, TABLE_NAME 

FROM    USER_INDEXES

WHERE TABLE_NAME = 'T2';


<실행결과>

 

INDEX_NAME

TABLE_NAME

1

PK_T2

T2

2

UK_T2_TEL

T2

 

#고유키, #오라클고유키, #UniqueKey, #ORACLE, #ORACLE강좌, #ORACLE교육

(C#교육동영상)C# ADO.NET 실습 ODP.NET/ODAC 설치 오라클 함수 호출 실습, C#학원, WPF학원, 닷넷학원, 자바학원

  (C#교육동영상)C# ADO.NET 실습  ODP.NET/ODAC 설치  오라클 함수 호출 실습, C#학원, WPF학원, 닷넷학원, 자바학원 https://www.youtube.com/watch?v=qIPU85yAlzc&list=PLxU-i...