
Table::delete를 사용할 때 외래 키 참조 문제를 해결하는 방법은 다음과 같습니다.
1. 외래 키를 삭제하기 전, 해당 테이블의 데이터를 삭제하는 방법은 ON DELETE CASCADE 옵션을 사용하는 것입니다. 이 옵션을 설정하면, 외래 키를 참조하는 테이블의 데이터가 삭제되면, 참조하는 테이블의 데이터도 자동으로 삭제됩니다.
예를 들어, 다음과 같은 테이블 구조가 있다고 가정해 보겠습니다.
#hostingforum.kr
sql
CREATE TABLE 부모 (
id INT PRIMARY KEY,
이름 VARCHAR(255)
);
CREATE TABLE 자식 (
id INT PRIMARY KEY,
부모_id INT,
FOREIGN KEY (부모_id) REFERENCES 부모(id) ON DELETE CASCADE
);
이 경우, 부모 테이블의 데이터가 삭제되면, 자식 테이블의 데이터도 자동으로 삭제됩니다.
2. 외래 키를 삭제하기 전, 다른 테이블의 데이터를 삭제하는 방법은 ON DELETE SET NULL 옵션을 사용하는 것입니다. 이 옵션을 설정하면, 외래 키를 참조하는 테이블의 데이터가 삭제되면, 참조하는 테이블의 외래 키 열은 NULL로 설정됩니다.
예를 들어, 다음과 같은 테이블 구조가 있다고 가정해 보겠습니다.
#hostingforum.kr
sql
CREATE TABLE 부모 (
id INT PRIMARY KEY,
이름 VARCHAR(255)
);
CREATE TABLE 자식 (
id INT PRIMARY KEY,
부모_id INT,
FOREIGN KEY (부모_id) REFERENCES 부모(id) ON DELETE SET NULL
);
이 경우, 부모 테이블의 데이터가 삭제되면, 자식 테이블의 외래 키 열은 NULL로 설정됩니다.
3. 외래 키를 삭제하기 전, 데이터를 백업하는 방법은 다음과 같습니다.
- 데이터를 백업하기 전에, 외래 키를 삭제하는 명령어를 실행합니다.
- 백업한 데이터를 사용하여, 원래 데이터를 복원합니다.
예를 들어, 다음과 같은 명령어를 실행해 보겠습니다.
#hostingforum.kr
sql
-- 데이터를 백업하기 전에 외래 키를 삭제하는 명령어를 실행합니다.
ALTER TABLE 부모 DROP FOREIGN KEY 부모_자식;
-- 백업한 데이터를 사용하여 원래 데이터를 복원합니다.
INSERT INTO 부모 (id, 이름) SELECT id, 이름 FROM 백업_부모;
이 경우, 데이터를 백업하기 전에 외래 키를 삭제한 후, 백업한 데이터를 사용하여 원래 데이터를 복원합니다.
2025-04-08 17:01