NULL 제약 조건 및 UNIQUE

보히·2024년 8월 2일
  1. NULL 제약조건
    1-1
    sql코드 :
    -- NULL 제약 조건을 가진 테이블 생성
    CREATE TABLE null_test (
    col1 VARCHAR2(20) NOT NULL,
    col2 VARCHAR2(20) NULL,
    col3 VARCHAR2(20) -- 기본값이 NULL, 생략 가능
    );
    col1: NOT NULL 제약 조건을 가집니다. 이 컬럼에는 NULL 값을 허용하지 않습니다.
    col2: NULL 값을 허용합니다. 이 컬럼은 선택적으로 값을 넣을 수 있습니다.
    col3: NULL 기본값을 가지며, 이 컬럼도 선택적으로 값을 넣을 수 있습니다.

1-2
sql코드 :
-- 데이터 삽입
INSERT INTO null_test (col1, col2)
VALUES ('aa', 'bb');

-- 데이터 조회
SELECT * FROM null_test;

-- 데이터 삭제
DELETE FROM null_test
WHERE col1 = 'aa';

-- 데이터 삽입 (NULL 값을 허용하는 컬럼에 값 삽입)
INSERT INTO null_test (col1, col3)
VALUES ('cc', 'dd');

-- col1 오류 발생
-- INSERT INTO null_test (COL2,COL3)
-- VALUES ('cc', 'dd');

  1. UNIQUE 제약 조건

2-1.
sql코드 :
-- UNIQUE 제약 조건을 가진 테이블 생성
CREATE TABLE unique_test (
col1 VARCHAR2(20) NOT NULL UNIQUE,
col2 VARCHAR2(20) UNIQUE,
col3 VARCHAR2(20) NOT NULL,
col4 VARCHAR2(20) NOT NULL
);
col1: NOT NULL 및 UNIQUE 제약 조건이 있습니다. NULL 값을 허용하지 않으며, 값이 유일해야 합니다.
col2: UNIQUE 제약 조건이 있습니다. 이 컬럼의 값이 유일해야 합니다.
col3 및 col4: NOT NULL 제약 조건이 있습니다. NULL 값을 허용하지 않습니다.

2-2.
sql코드 :
-- 데이터 삽입
INSERT INTO unique_test (col1, col2, col3, col4)
VALUES ('aa', 'bb', 'cc', 'dd');

INSERT INTO unique_test (col1, col2, col3, col4)
VALUES ('aa2', 'bb2', 'cc2', 'dd2');

-- 데이터 업데이트 , 오류발생
-- UPDATE unique_test
-- SET col1 = 'aa'
-- WHERE col2 = 'bb2';
SET col1 = 'aa' : col1값은 unique 중복허용x
SET col2 = 'bb2' : col2값은 unique 중복허용x

-- 데이터 삽입
INSERT INTO unique_test (col1, col2, col3, col4)
VALUES ('aa3', '', 'cc3', 'dd3');

-- 데이터 삽입 (NULL 값은 중복 가능)
INSERT INTO unique_test (col1, col2, col3, col4)
VALUES ('aa4', '', 'cc4', 'dd4');
UNIQUE 제약: 단일 컬럼의 값이 유일해야 함을 의미합니다. 그러나 동일한 값을 가진 컬럼이 여러 개 존재할 수 있지만, 조합으로 유일해야 합니다.

  1. 복합 UNIQUE 제약 조건

sql코드 :
-- 복합 UNIQUE 제약 조건을 가진 테이블 생성
CREATE TABLE unique_test2 (
col1 VARCHAR2(20),
col2 VARCHAR2(20),
CONSTRAINTS temp_unique UNIQUE (col1, col2)
);
복합 UNIQUE 제약: col1과 col2의 조합이 유일해야 합니다. 각 컬럼의 개별 값이 유일할 필요는 없지만, 조합이 유일해야 합니다.

sql코드 :
-- 데이터 삽입
INSERT INTO unique_test2 (col1, col2)
VALUES ('aa', 'bb');

INSERT INTO unique_test2 (col1, col2)
VALUES ('aa', 'aa');

INSERT INTO unique_test2 (col1, col2)
VALUES ('aa', 'cc');

INSERT INTO unique_test2 (col1, col2)
VALUES ('bb', 'aa');

INSERT INTO unique_test2 (col1, col2)
VALUES ('bb', 'bb');

INSERT INTO unique_test2 (col1, col2)
VALUES ('bb', 'cc');

-- 데이터 조회
SELECT * FROM unique_test2;
복합 UNIQUE 제약 예시:
('aa', 'bb'), ('aa', 'aa'), ('aa', 'cc'), ('bb', 'aa'), ('bb', 'bb'), ('bb', 'cc')이 모두 유효한 데이터입니다.
col1과 col2의 조합이 유일해야 하므로, 같은 조합의 데이터는 삽입할 수 없습니다.

  • CHECK

SQL코드 :
-- CHECK 제약 조건을 가진 테이블 생성
CREATE TABLE check_test (
gender VARCHAR2(20) NOT NULL,
CONSTRAINT check_gender CHECK (gender IN ('남자', '여자'))
);
gender 컬럼: NOT NULL 제약 조건이 있으며, CHECK 제약 조건을 통해 '남자'와 '여자'만 허용됩니다.
CONSTRAINT check_gender: 이 제약 조건은 gender 컬럼에 입력될 수 있는 값이 '남자'와 '여자'로 제한됩니다.

SQL 코드:
-- 올바른 데이터 삽입
INSERT INTO check_test (gender) VALUES ('남자');
INSERT INTO check_test (gender) VALUES ('여자');
-- 잘못된 데이터 삽입 (주석 처리된 부분은 오류 발생)
-- INSERT INTO check_test (gender) VALUES ('M'); -- 오류: 'M'은 허용되지 않는 값입니다.
-- INSERT INTO check_test (gender) VALUES ('F'); -- 오류: 'F'는 허용되지 않는 값입니다.
'남자'와 '여자'는 허용된 값이므로 삽입이 성공합니다.
'M'과 'F'는 허용되지 않는 값으로 CHECK 제약 조건에 의해 오류가 발생합니다.

요약
테이블 생성: CHECK 제약 조건을 통해 gender 컬럼에 '남자'와 '여자'만 입력 가능하도록 설정합니다.
데이터 삽입: 제약 조건에 맞는 값만 삽입할 수 있으며, 제약 조건에 맞지 않는 값은 삽입할 수 없습니다.
데이터 조회: 테이블에 저장된 데이터를 조회하여 제약 조건이 제대로 작동하는지 확인할 수 있습니다.

0개의 댓글