Notice
Recent Posts
Recent Comments
«   2024/12   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
Archives
Today
Total
관리 메뉴

충분히 쌓여가는

15 외래키로 연결된 데이터 입력, 삭제하기 본문

MSSQL/SQL 시작하기

15 외래키로 연결된 데이터 입력, 삭제하기

빌드이너프 2024. 10. 5. 08:35

관계형 데이터베이스는 데이터의 무결성을 유지해야 하므로 부모 테이블에 없는 데이터를 자식 테이블이 가지면 안되는 것이 원칙이다.

해당 원칙을 유지하면 데이터가 잘못 입력되거나 삭제되는 것을 방지할 수 있다.

 

테이블의 종속 관계가 있을 때 외래키가 지정된 상황을 가정

외래키는 테이블이 관게를 구성할 때 참조하는 열을 의미하고,

[회원] 테이블의 (회원 번호) 열이 기본키(Pirmary Key, PK)이고 [주문] 테이블의 (회원 번호) 열이 외래키(Foreign Key, FK)이다.

 

실습을 위해 2개의 테이블 생성

CREATE TABLE doit_parent (col_1 INT PRIMARY KEY);
CREATE TABLE doit_child (col_1 INT);

ALTER TABLE doit_child
ADD FOREIGN KEY (col_1) REFERENCES doit_parent(col_1);

 

자식 테이블에 데이터 입력: 실패

INSERT INTO doit_child VALUES (1);

자식 테이블에 데이터를 입력할 때 부모 테이블에 해당 데이터가 없는 상태라서 오류가 발생해 데이터 입력에 실패하는 쿼리

 

부모 테이블에 데이터를 입력한 뒤, 자식 테이블에 같은 데이터 입력: 성공

INSERT INTO doit_parent VALUES (1);
INSERT INTO doit_child VALUES (1);
SELECT * FROM doit_parent;
SELECT * FROM doit_child;

부모 테이블에 데이터 입력 후, 같은 데이터를 자식 테이블에 입력하면 정상적으로 데이터를 입력할 수 있다.

 

부모 테이블의 데이터 삭제: 실패

DELETE doit_parent WHERE col_1 = 1;

 

자식 테이블에서 데이터 삭제한 뒤, 부모 테이블의 데이터 삭제: 성공

DELETE doit_child WHERE col_1 = 1;
DELETE doit_parent WHERE col_1 = 1;

외래키가 설정된 테이블을 삭제하려면 자식 테이블, 부모 테이블 순서로 삭제해야 한다.

 

 

만약 자식 테이블의 데이터는 유지하면서 부모 테이블을 삭제하고 싶다면 제약 조건을 제거해 테이블 삭제를 진행하는 방법도 있다.

제약 조건을 삭제하는 명령어는 DROP CONSTRAINT를 사용하는데 이때 제약 조건의 이름을 명시해야 한다.

-- 제약 조건을 가진 테이블 다시 생성
CREATE TABLE doit_parent (col_1 INT PRIMARY KEY);
CREATE TABLE doit_child (col_1 INT);

ALTER TABLE doit_child
ADD FOREIGN KEY (col_1) REFERENCES doit_parent(col_1);

-- 제약 조건을 제거한 뒤, 부모 테이블 삭제
ALTER TABLE doit_child
DROP CONSTRAINT FK__doit_chil__col_1__2A164134;

DROP TABLE doit_parent;

 

 

제약 조건과 제약 이름을 확인하고 싶다면 sp_help [테이블 이름]을 입력하거나

[테이블 이름]을 드래그한 상태에서 Alt + F1을 눌러 실행하면 확인할 수 있다.

sp_help doit_child;