02. 빈값을 허락하지 않는 NOT NULL
테이블을 생성하며 제약 조건 지정
NOT NULL은 특정 열에 데이터의 중복 여부와는 상관없이 NULL의 저장을 허용하지 않는 제약 조건이다. 반드시 열에 값이 존재해야만 하는 경우에 지정한다.
-- 테이블을 생성할 때 NOT NULL 설정하기
CREATE TABLE TABEL_NOTNULL (
LOGIN_ID VARCHAR2(20) NOT NULL,
LOGIN_PWD VARCHAR2(20) NOT NULL,
TEL VARCHAR2(20) );
-- 제약 조건이 NOT NULL인 열에 NULL 값 넣어보기
INSERT INTO TABLE_NOTNULL ( LOGIN_ID, LOGIN_PWD, TEL)
VALUES ( 'TEST_ID_01' , NULL, '010-1234-5678');
>> NULL을 ("SCOTT"."TABLE_NOTNULL"."LOGIN_PWD") 안에 삽입할 수 없습니다. 메세지 출력
-- 제약 조건이 없는 TEL열에 NULL 값 입력하기
INSERT INTO TABLE_NOTNULL ( LOGIN_ID, LOGIN_PWD)
VALUES ('TEST_ID_01' ,'1234' );
열의 제약 조건으로 NOT NULL을 지정하면 UPDATE문을 사용하여 LOGIN_ID나 LOGIN_PWD열 값을 NULL로 수정하는 것도 불가능하다. 제약 조건을 지정한 열을 항상 해당 제약 조건을 만족해야 하므로 신규 데이터의 삽입뿐만 아니라 기존 데이터의 수정 및 삭제에도 영향을 준다.
-- NOT NULL 제약 조건이 지정된 열 데이터를 NULL 값으로 업데이트 해보기
UPDATE TABLE_NOTNULL
SET LOGIN_PWD = NULL
WHERE LOGIN_ID = 'TEST_ID_01';
>> NULL로 ("SCOTT"."TABLE_NOTNULL"."LOGIN_PWD")을 업데이트할 수 없습니다. 메세지 출력
제약 조건 확인
지정한 제약 조건 정보를 확인하려면 USER_CONSTRAINTS 데이터 사전을 활용한다.
1) OWNER : 제약 조건 소유 계정
2) CONSTRAINT_NAME : 제약 조건 이름 ( 미지정시 오라클이 자동으로 지정해준다 )
3) CONSTRAINT_TYPE : 제약 조건 종류
- C: CHECK, NOT NULL
- U : UNIQUE
- P : PRIMARY KEY
- R : FOREIGN KEY
4) TABLE_NAME : 제약 조건을 지정한 테이블 이름
제약 조건 이름 직접 지정
TABLE_NOTNULL 테이블에 지정한 제약 조건은 이름을 따로 지정해 주지 않아 오라클에서 이름을 자동 지정했다. 제약 조건에 이름을 직접 지정하려면 CONSTRAINT 키워드를 사용한다.
CREATE TABLE TABEL_NOTNULL (
LOGIN_ID VARCHAR2(20) CONSTRAINT TBLNN2_LGNID_NN NOT NULL,
LOGIN_PWD VARCHAR2(20) CONSTRAINT TBLNN2_LGNPWD_NN NOT NULL,
TEL VARCHAR2(20) );
제약 조건을 잘 변경하지 않으므로 테이블을 생성할 때 작성해 주면 된다.
이미 생성한 테이블에 제약 조건 지정
제약 조건은 저장할 데이터에 제한을 주는 규칙으로 작용한다. 이러한 특성으로 인해 제약 조건은 데이터와 테이블을 설계하는 시점, 즉 데이터베이스 사용 주기에서 비교적 초기에 지정하는 것이 일반적이다. 하지만 경우에 따라 이미 생성된 테이블에 제약 조건을 추가하거나 제약 조건을 변경 또는 삭제하는 경우도 가끔 생긴다.
생성한 테이블에 제약 조건 추가하기
NOT NULL 제약 조건의 추가는 ALTER 명령어와 MODIFY 키워드를 사용한다.
ALTER TABEL TABLE_NOT NULL MODIFY (TEL NOT NULL);
>> (SCOTT.) 사용으로 설정 불가 - 널 값이 발견되었습니다.
-- TEL 열 데이터 수정하기
UPDATE TABLE_NOTNULL
SET TEL = '010-1234-5678'
WHERE LOGIN_ID = 'TEST_ID_01';
-- 다시 NOT NULL 제약조건 추가하기
ALTER TABEL TABLE_NOT NULL MODIFY (TEL NOT NULL);
생성한 테이블에 제약 조건 이름 직접 지정해서 추가하기
ALTER TABLE TABLE_NOTNULL2
MODIFY ( TEL CONSTRAINT TBLNN_TEL_NN NOT NULL) ;
생성한 제약 조건의 이름 변경하기
ALTER TABEL TABLE_NOTNULL2
RENAME CONSTRAINT TBLNN_TEL_NN TO TBLNN2_TEL_NN ;
제약 조건 삭제하기
ALTER 명령어에 DROP CONSTRAINT 키워드를 사용하면 지정한 제약 조건을 삭제할 수 있다.
ALTER TABEL TABLE_NOTNULL2 DROP CONSTRAINT TBLNN2_TEL_NN ;