목요일, 1월 21, 2021

[유튜브 방송] (즐겁게 배우는 SQL #38) 제약 조건 - 외래 키

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

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

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

  • 00:00 외래 키 기능 확인
  • 03:47 외래 키 예제
  • 06:41 외래 키 제약 행위(SET NULL)
  • 12:21 외래 키 제약 행위(RESTRICT)
  • 15:00 외래 키 제약 행위(CASCADE)

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

  • 단계 1: 외래 키 기능 확인
    FOREIGN KEY (foreign_key_columns)
       REFERENCES parent_table(parent_key_columns)
          ON UPDATE action 
          ON DELETE action;
    
    1. 참고: 3.6.19 버전 이후에 외래 키를 지원
    2. 주의: SQLite을 컴파일할 때 SQLITE_OMIT_FOREIGN_KEY나 SQLITE_OMIT_TRIGGER를 정의하면 외래 키 제약을 사용할 수 없다
    3. 외래 키를 보고, 끄고 켜는 방법:
    4. SQL> PRAGMA foreign_keys;
    5. SQL> PRAGMA foreign_keys = OFF;
    6. SQL> PRAGMA foreign_keys = ON;
  • 단계 2: 외래 키 예제
    1. SQL> PRAGMA foreign_keys = ON;
    2. SQL> CREATE TABLE suppliers ( supplier_id integer PRIMARY KEY, supplier_name text NOT NULL, group_id integer NOT NULL );
    3. SQL> CREATE TABLE supplier_groups ( group_id integer PRIMARY KEY, group_name text NOT NULL );
    4. SQL> DROP TABLE suppliers;
    5. SQL> CREATE TABLE suppliers ( supplier_id INTEGER PRIMARY KEY, supplier_name TEXT NOT NULL, group_id INTEGER NOT NULL, FOREIGN KEY (group_id) REFERENCES supplier_groups (group_id) );
    6. SQL> INSERT INTO supplier_groups (group_name) VALUES ('Domestic'), ('Global'), ('One-Time');
    7. SQL> INSERT INTO suppliers (supplier_name, group_id) VALUES ('HP', 2);
    8. SQL> INSERT INTO suppliers (supplier_name, group_id) VALUES('ABC Inc.', 4);
  • 단계 3: 외래 키 제약 행위(SET NULL)
    1. SQL> PRAGMA foreign_keys = ON;
    2. SQL> DROP TABLE suppliers;
    3. SQL> CREATE TABLE suppliers ( supplier_id INTEGER PRIMARY KEY, supplier_name TEXT NOT NULL, group_id INTEGER, FOREIGN KEY (group_id) REFERENCES supplier_groups (group_id) ON UPDATE SET NULL ON DELETE SET NULL );
    4. SQL> INSERT INTO suppliers (supplier_name, group_id) VALUES('XYZ Corp', 3);
    5. SQL> INSERT INTO suppliers (supplier_name, group_id) VALUES('ABC Corp', 3);
    6. SQL> DELETE FROM supplier_groups WHERE group_id = 3;
    7. SQL> SELECT * FROM suppliers;
  • 단계 4: 외래 키 제약 행위(RESTRICT)
    1. SQL> PRAGMA foreign_keys = ON;
    2. SQL> DROP TABLE suppliers;
    3. SQL> CREATE TABLE suppliers ( supplier_id INTEGER PRIMARY KEY, supplier_name TEXT NOT NULL, group_id INTEGER, FOREIGN KEY (group_id) REFERENCES supplier_groups (group_id) ON UPDATE RESTRICT ON DELETE RESTRICT );
    4. SQL> INSERT INTO suppliers (supplier_name, group_id) VALUES('XYZ Corp', 1);
    5. SQL> DELETE FROM supplier_groups WHERE group_id = 1;
    6. SQL> DELETE FROM suppliers WHERE group_id =1;
    7. SQL> DELETE FROM supplier_groups WHERE group_id = 1;
  • 단계 5: 외래 키 제약 행위(CASCADE)
    1. SQL> PRAGMA foreign_keys = ON;
    2. SQL> DELETE FROM supplier_groups;
    3. SQL> DROP TABLE suppliers;
    4. SQL> CREATE TABLE suppliers ( supplier_id INTEGER PRIMARY KEY, supplier_name TEXT NOT NULL, group_id INTEGER, FOREIGN KEY (group_id) REFERENCES supplier_groups (group_id) ON UPDATE CASCADE ON DELETE CASCADE );
    5. SQL> INSERT INTO suppliers (supplier_name, group_id) VALUES('XYZ Corp', 1);
    6. SQL> INSERT INTO suppliers (supplier_name, group_id) VALUES('ABC Corp', 2);
    7. SQL> UPDATE supplier_groups SET group_id = 100 WHERE group_name = 'Domestic';
    8. SQL> SELECT * FROM suppliers;
    9. SQL> DELETE FROM supplier_groups WHERE group_id = 2;
    10. SQL> SELECT * FROM suppliers;
EOB

댓글 없음:

댓글 쓰기