반응형
기본키 - 메인
- 기본키는 테이블 내에서 유일한 값이어야하고 NOT NULL이어야 한다
- 테이블 내에서 반드시 존재해야하는 실체 무결성에 대한 제약
---------- # 기본키 생성
CREATE TABLE TB_PRODUCT_PK_TEST (
PRODUCT_NO INTEGER
, DESCRIPTION TEXT
, PRODUCT_COST NUMERIC
);
ALTER TABLE TB_PRODUCT_PK_TEST ADD PRIMARY KEY (PRODUCT_NO);
---------- # 기본키 생성 + AUTOINCREMENT
ALTER TABLE TB_PRODUCT_PK_TEST_2 -- AUTOINCREMENT로 기본키를 생성하면
ADD COLUMN ID SERIAL PRIMARY KEY; -- 기본키 컬럼이 추가되면서 값도 자동으로 생성
---------- # 기본키 제거
ALTER TABLE TB_PRODUCT_PK_TEST
DROP CONSTRAINT TB_PRODUCT_PK_TEST_PKEY;
외래키 - 참조
- 외래키는 자식 테이블의 특정 컬럼이 부모 테이블의 특정 컬럼 값을 참조하는 것이다.
- 이를 참조 무결성이라고 한다.
---------- # 테이블 생성과 동시에 외래키 생성
CREATE TABLE SO_ITEMS (
ITEM_ID INTEGER NOT NULL,
SO_ID INTEGER REFERENCES SO_HEADERS(ID),
PRODUCT_ID INTEGER,
QTY INTEGER,
NET_PRICE NUMERIC,
PRIMARY KEY (ITEM_ID,SO_ID)
);
---------- # 복합 외래키도 생성 가능
CREATE TABLE CHILD_TABLE(
C1 INTEGER PRIMARY KEY,
C2 INTEGER,
C3 INTEGER,
FOREIGN KEY (C2, C3) REFERENCES PARENT_TABLE (P1, P2)
);
---------- # 외래키 추가 생성 'REFERENCES'
ALTER TABLE SO_ITEMS
ADD CONSTRAINT FK_SO_HEADERS_ID
FOREIGN KEY (SO_ID)
REFERENCES SO_HEADERS(ID)
;
---------- # 외래키 삭제
ALTER TABLE SO_ITEMS
DROP CONSTRAINT FK_SO_HEADERS_ID;
Check - 제약
- 체크 제약 조건은 특정 컬럼에 들어가는 값에 대한 제약을 가하는 것이다.
- 절대로 들어갈 수 없는 값이 들어가서 오류가 나는 것을 사전에 차단
---------- # 테이블 생성시 체크 조건
CREATE TABLE TB_EMP_CHECK_TEST (
ID SERIAL PRIMARY KEY
, FIRST_NAME VARCHAR (50)
, LAST_NAME VARCHAR (50)
, BIRTH_DATE DATE CHECK (BIRTH_DATE > '1900-01-01') -- 생일은 1900.1.1 이후
, JOINED_DATE DATE CHECK (JOINED_DATE > BIRTH_DATE) -- 입사일은 생일보다 큼
, SALARY NUMERIC CHECK(SALARY > 0) -- 연봉은 0보다 큼
);
---------- # 테이블 생성 후 체크 조건 추가
ALTER TABLE TB_EMP_CHECK_TEST
ADD CONSTRAINT SALARY_RANGE_CHECK
CHECK (SALARY > 0 AND SALARY <= 10000000000) -- 연봉은 0보다 크고 100억 이하
;
Unique - 유일
- 특정 컬럼 값이 한 테이블 내에서 유일하기를 보장
---------- # UNIQUE
CREATE TABLE PERSON (
ID SERIAL PRIMARY KEY
, FIRST_NAME VARCHAR (50)
, LAST_NAME VARCHAR (50)
, EMAIL VARCHAR (50)
, UNIQUE(EMAIL) -- 이메일 주소는 유일해야함
);
---------- # UNIQUE INDEX 생성
CREATE TABLE PERSON_UNIQUE_INDEX_TEST (
ID SERIAL PRIMARY KEY
, FIRST_NAME VARCHAR (50)
, LAST_NAME VARCHAR (50)
, EMAIL VARCHAR (50)
);
CREATE UNIQUE INDEX IX_PERSON_UNIQUE_INDEX_TEST_01
ON PERSON_UNIQUE_INDEX_TEST(EMAIL);
Not Null - Null값 방지
- NOT NULL 제약 조건은 특정 컬럼에 NULL 값이 들어가는 것을 방지
---------- # Not Null 조건 명시
CREATE TABLE INVOICE(
ID SERIAL PRIMARY KEY
, PRODUCT_ID INT NOT NULL
, QTY NUMERIC NOT NULL CHECK(QTY > 0)
, NET_PRICE NUMERIC CHECK(NET_PRICE > 0)
);
Reference
- Fast Campus, 모두를 위한 SQL/DB 올인원 패키지 온라인 강의
반응형
'Data > Sql' 카테고리의 다른 글
[SQL] With문 - With문 활용, 재귀 쿼리 (0) | 2023.06.19 |
---|---|
[SQL] 조건 연산자 - Case, Coalesce, NullIf, Cast (0) | 2023.06.19 |
[SQL] 데이터 타입 - Boolean, Char/Varchar/Text, Numeric, Integer, Serial, Date/Time/Timestamp (0) | 2023.06.19 |
[SQL] 테이블 관리 - 테이블 및 컬럼 생성/변경, CTAS, Truncate (0) | 2023.06.19 |
[SQL] 데이터 조작 - Insert, Update, UpdateJoin, Delete, Upsert, Export, Import (0) | 2023.06.19 |