수요일, 1월 27, 2021

[유튜브 방송] (즐겁게 배우는 SQL #41) 제약 조건 - CHECK 제약

[유튜브 방송] (즐겁게 배우는 SQL) 기획 소개에서 설명드린 즐겁게 배우는 SQL 41편을 공개해드리겠다. 41편은 CHECK 제약 조건을 소개한다.

2021년 1월 27일자 [즐겁게 배우는 SQL #41] 제약 조건 - CHECK 제약 방송은 다음에서 볼 수 있으며, 전체 방송 플레이리스트는 즐겁게 배우는 SQL에서 확인할 수 있다.

하이라이트를 요약 정리하면 다음과 같다:

  • 00:00 CHECK 제약 기본 형식 소개
  • 03:06 컬럼 CHECK 예제
  • 06:02 테이블 CHECK 예제
  • 08:04 기존 테이블에 CHECK 제약 걸기

원본 학습자료는 SQLite CHECK constraints를 참고하고, 방송에 사용한 실제 실습 자료는 다음을 참고한다:

  • 단계 1: CHECK 제약 기본 형식
    CREATE TABLE table_name(
        ...,
        column_name data_type CHECK(expression),
        ...
    );
    
    CREATE TABLE table_name(
        ...,
        CHECK(expression)
    );
    
    BEGIN;
    -- create a new table 
    CREATE TABLE new_table (
        [...],
        CHECK ([...])
    );
    -- copy data from old table to the new one
    INSERT INTO new_table SELECT * FROM old_table;
    
    -- drop the old table
    DROP TABLE old_table;
    
    -- rename new table to the old one
    ALTER TABLE new_table RENAME TO old_table;
    
    -- commit changes
    COMMIT;
    
  • 단계 2: 컬럼 CHECK 예제
    1. SQL> CREATE TABLE contacts ( contact_id INTEGER PRIMARY KEY, first_name TEXT NOT NULL, last_name TEXT NOT NULL, email TEXT, phone TEXT OT NULL CHECK (length(phone) >= 10) );
    2. SQL> INSERT INTO contacts(first_name, last_name, phone) VALUES('John','Doe','408123456');
    3. SQL> INSERT INTO contacts(first_name, last_name, phone) VALUES('John','Doe','(408)-123-456');
  • 단계 3: 테이블 CHECK 예제
    1. SQL> CREATE TABLE products ( product_id INTEGER PRIMARY KEY, product_name TEXT NOT NULL, list_price DECIMAL (10, 2) NOT NULL, discount DECIMAL (10, 2) NOT NULL DEFAULT 0, CHECK (list_price >= discount AND discount >= 0 AND list_price >= 0) );
    2. SQL> INSERT INTO products(product_name, list_price, discount) VALUES('New Product #1',2000,1000);
    3. SQL> INSERT INTO products(product_name, list_price, discount) VALUES('New Product #2',900,1000);
    4. SQL> INSERT INTO products(product_name, list_price, discount) VALUES('New XFactor',1000,-10);
  • 단계 4: 기존 테이블에 CHECK 제약 걸기
    1. SQL> CREATE TABLE contacts ( contact_id INTEGER PRIMARY KEY, first_name TEXT NOT NULL, last_name TEXT NOT NULL, email TEXT, phone TEXT NOT NULL );
    2. SQL> INSERT INTO contacts(first_name, last_name, phone) VALUES('John','Doe','(408)-123-456');
    3. SQL> BEGIN;
    4. SQL> CREATE TABLE new_contacts ( contact_id INTEGER PRIMARY KEY, first_name TEXT NOT NULL, last_name TEXT NOT NULL, email TEXT, phone TEXT NOT NULL CHECK (length(phone) >= 10) );
    5. SQL> INSERT INTO new_contacts SELECT * FROM contacts;
    6. SQL> DROP TABLE contacts;
    7. SQL> ALTER TABLE new_contacts RENAME TO contacts;
    8. SQL> COMMIT;
EOB

댓글 없음:

댓글 쓰기