PRIMARY KEY 제약 조건은 UNIQUE와 NOT NULL의 제약 조건의 특성을 모두 가지는 제약 조건이다. 즉 데이터 중복을 허용하지 않고 NULL도 허용하지 않는다. NULL이 아닌 유일한 값을 가지므로 테이블의 각 행을 식별하는 데 사용한다. PRIMARY KEY 제약 조건은 테이블에 하나밖에 지정할 수 없고, 특정 열을 PK로 지정하면 해당 열에는 자동으로 인덱스가 만들어진다. 예민한 개인정보를 의미하는 데이터는 PK로 지정하지 않는다.
테이블을 생성하며 제약 조건 지정하기
CREATE TABLE TABLE_PK (
LOGIN_ID VARCHAR2(20) PRIMARY KEY,
LOGIN_PWD VARCHAR2(20) NOT NULL,
TEL VARCHAR2(20) );
PRIMARY KEY 제약 조건은 특정 테이블의 데이터를 식별하는 유일한 값이다. 이 때문에 SELECT문을 통한 검색에 자주 활용되므로 PRIMARY KEY 제약 조건을 지정한 열에는 자동으로 인덱스가 만들어 진다는 것을 기억하자.
테이블을 생성하며 제약조건 이름 직접 지정하기
CREATE TABLE TABLE_PK2 (
LOGIN_ID VARCHAR2(20) CONSTRAINT TBLPK2_LGNID_PK PRIMARY KEY,
LOGIN_PWD VARCHAR2(20) CONSTRAINT TBLPK2_LGNPWD_NN NOT NULL,
TEL VARCHAR2(20) );
제약 조건의 이름을 직접 지정하지 않아도 오라클이 자동으로 생성한 이름이 인덱스(INDEX_NAME)에 사용된다.
[ SELECT INDEX_NAME, TABLE_NAME FROM USER_INDEXES; ]
PRIMARY KEY 제약 조건을 지정한 열 확인해보기 ( 중복값 입력시 )
PRIMARY KEY 제약 조건을 지정한 열에는 중복 값과 NULL이 허용되지 않는다. 다음 INSERT문을 두번 실행했을때 중복 값의 허용 여부를 보자.
INSERT INTO TABLE_PK VALUES ('TEST_ID_01','1234','010-1234-5678');
처음 실행때는 데이터가 들어가지만, 두번째 실행시에는 무결성 제약 조건에 위배되므로 데이터가 추가되지 않는다.
PRIMARY KEY 제약 조건을 지정한 열 확인해보기 ( NULL 입력시 )
이번에는 NULL값을 입력해보자.
INSERT INTO TABLE_PK VALUES (NULL, '2345', '010-2345-6789');
INSERT INTO TABLE_PK(LOGIN_PWD,TEL) VALUES ('1234','010-3456-7890');
>> NULL을 삽입할수 없습니다
PRIMARY KEY 제약 조건 역시 ALTER문의 MODIFY, RENAME, DROP 등을 통해 추가, 변경, 삭제 등이 가능하다. 하지만 PRIMARY KEY 제약 조건은 테이블 데이터를 식별하는 유일한 값을 뜻하므로 일반적으로 테이블 생성 시점에 확정되는 경우가 대부분이다. (ALTER문을 잘 사용하지 않는다.) 그리고 테이블에 이미 PK가 지정되어 있다면 다른 열에는 추가할 수 없다. 또 PK를 지정하려는 열에 중복 값이나 NULL이 있을 경우에도 동작하지 않는다는 점. 꼭 기억하기!
CREATE문에서 제약 조건을 지정하는 다른 방식
CREATE문을 통해 제약 조건을 지정할 때 보통 열 바로 옆에 제약 조건을 지정하는 형식을 많이 사용했는데, 이를 인라인(inline) 또는 열 레벨(column-level) 제약 조건 정의라고 한다. 모든 제약 조건은 이 방식으로 지정할 수 있다.
CREATE TABLE TABLE_NAME (
COL1 VARCHAR2(20) CONSTRAINT CONSTRAINT_NAME PRIMARY KEY,
COL2 VARCHAR2(20) NOT NULL );
이와 달리 열을 정의한 후에 별도로 제약 조건을 정의할 수도 있다. 다음과 같이 열을 명시한 후 제약 조건을 테이블 단위에 지정하는 방식을 아웃오브라인(out-of-line) 또는 테이블 레벨(table-level) 제약 조건 정의라고 한다. 이 방식은 NOT NULL제약 조건을 제외한 제약 조건 지정이 가능하다.
CREATE TABLE TABLE_NAME(
COL1 VARCHAR2(20),
COL2 VARCHAR2(20),
PRIMARY KEY (COL1),
CONSTRAINT CONSTRAINT_NAME UNIQUE (COL2) ); >> NOT NULL은 지정할 수 없다!
'DATABASE > CONSTRAINT : 제약조건' 카테고리의 다른 글
06. 데이터 형태와 범위를 정하는 CHECK (0) | 2024.03.26 |
---|---|
05. 다른 테이블과 관계를 맺는 FOREIGN KEY (0) | 2024.03.26 |
03. 중복되지 않는 값 UNIQUE (0) | 2024.03.26 |
02. 빈값을 허락하지 않는 NOT NULL (0) | 2024.03.23 |
01. 제약 조건 종류 (0) | 2024.03.23 |