[유튜브 방송] (즐겁게 배우는 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;
- 참고: 3.6.19 버전 이후에 외래 키를 지원
- 주의: SQLite을 컴파일할 때 SQLITE_OMIT_FOREIGN_KEY나 SQLITE_OMIT_TRIGGER를 정의하면 외래 키 제약을 사용할 수 없다
- 외래 키를 보고, 끄고 켜는 방법:
- SQL> PRAGMA foreign_keys;
- SQL> PRAGMA foreign_keys = OFF;
- SQL> PRAGMA foreign_keys = ON;
- 단계 2: 외래 키 예제
- SQL> PRAGMA foreign_keys = ON;
- SQL> CREATE TABLE suppliers ( supplier_id integer PRIMARY KEY, supplier_name text NOT NULL, group_id integer NOT NULL );
- SQL> CREATE TABLE supplier_groups ( group_id integer PRIMARY KEY, group_name text NOT NULL );
- SQL> DROP TABLE suppliers;
- 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) );
- SQL> INSERT INTO supplier_groups (group_name) VALUES ('Domestic'), ('Global'), ('One-Time');
- SQL> INSERT INTO suppliers (supplier_name, group_id) VALUES ('HP', 2);
- SQL> INSERT INTO suppliers (supplier_name, group_id) VALUES('ABC Inc.', 4);
- 단계 3: 외래 키 제약 행위(SET NULL)
- SQL> PRAGMA foreign_keys = ON;
- SQL> DROP TABLE suppliers;
- 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 );
- SQL> INSERT INTO suppliers (supplier_name, group_id) VALUES('XYZ Corp', 3);
- SQL> INSERT INTO suppliers (supplier_name, group_id) VALUES('ABC Corp', 3);
- SQL> DELETE FROM supplier_groups WHERE group_id = 3;
- SQL> SELECT * FROM suppliers;
- 단계 4: 외래 키 제약 행위(RESTRICT)
- SQL> PRAGMA foreign_keys = ON;
- SQL> DROP TABLE suppliers;
- 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 );
- SQL> INSERT INTO suppliers (supplier_name, group_id) VALUES('XYZ Corp', 1);
- SQL> DELETE FROM supplier_groups WHERE group_id = 1;
- SQL> DELETE FROM suppliers WHERE group_id =1;
- SQL> DELETE FROM supplier_groups WHERE group_id = 1;
- 단계 5: 외래 키 제약 행위(CASCADE)
- SQL> PRAGMA foreign_keys = ON;
- SQL> DELETE FROM supplier_groups;
- SQL> DROP TABLE suppliers;
- 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 );
- SQL> INSERT INTO suppliers (supplier_name, group_id) VALUES('XYZ Corp', 1);
- SQL> INSERT INTO suppliers (supplier_name, group_id) VALUES('ABC Corp', 2);
- SQL> UPDATE supplier_groups SET group_id = 100 WHERE group_name = 'Domestic';
- SQL> SELECT * FROM suppliers;
- SQL> DELETE FROM supplier_groups WHERE group_id = 2;
- SQL> SELECT * FROM suppliers;
댓글 없음:
댓글 쓰기