외래 키
PostgreSQL의 외래 키란 무엇인가요?
외래 키는 한 테이블의 값이 다른 테이블의 행과 일치하도록 요구하므로, 존재하지 않는 행을 가리킬 수 없습니다. ON DELETE는 참조된 행이 삭제될 때 어떻게 할지 결정합니다.
외래 키 제약 조건은 열(또는 열 그룹)의 값이 다른 테이블의 어떤 행의 값과 일치해야 함을 지정합니다. 관련 테이블 간의 일관성을 유지하며, 존재하지 않는 행을 가리키는 삽입이나 업데이트는 거부됩니다.
참조되는 열은 기본 키이거나 고유 제약 조건이 있어야 합니다. 참조된 행이 제거되면 ON DELETE 동작이 결과를 결정합니다. NO ACTION(기본값)과 RESTRICT는 삭제를 거부하고, CASCADE는 참조하는 행도 함께 제거하며, SET NULL이나 SET DEFAULT는 참조하는 행의 값을 변경합니다. PostgreSQL은 참조하는 열에 자동으로 인덱스를 만들지 않으며, 그곳에 인덱스를 추가하는 것이 유용한 경우가 많습니다.
예제
이 예제는 ON DELETE CASCADE로 invoices를 customers에 연결합니다. 고객을 삭제하면 그 고객의 송장도 함께 삭제되므로 최종 개수는 0입니다.
CREATE TABLE customers (id int PRIMARY KEY, name text NOT NULL);
CREATE TABLE invoices (
id int PRIMARY KEY,
customer_id int NOT NULL REFERENCES customers (id) ON DELETE CASCADE,
amount numeric NOT NULL
);
INSERT INTO customers VALUES (1, 'Acme');
INSERT INTO invoices VALUES (10, 1, 99.50);
DELETE FROM customers WHERE id = 1;
SELECT count(*) FROM invoices;확장 없이 기본 PostgreSQL 16 또는 17에서 실행되는 일반 SQL입니다. 버려도 되는 빈 데이터베이스에서 실행하세요.
출처
PostgreSQL 공식 문서(영문)입니다.