개발자 Q&A

개발하다 막혔다면? 여기서 질문하세요! 초보부터 고수까지, 함께 고민하고 해결하는 공간입니다. 누구나 자유롭게 질문하고 답변을 남겨보세요!

2025.04.08 17:00

Table::delete 관련 질문

목록
  • Kotlin도령 4일 전 2025.04.08 17:00
  • 5
    1
안녕하세요 선생님. 저는 SQL에서 Table::delete를 사용하여 데이터를 삭제할 때 발생할 수 있는 문제에 대해 궁금합니다.

Table::delete는 하나의 테이블에서 데이터를 삭제할 때 사용하는 명령어입니다. 하지만 이 명령어를 사용할 때, 해당 테이블의 외래 키를 참조하는 다른 테이블이 존재하는 경우, 삭제가 취소되거나 에러가 발생할 수 있습니다.

이러한 문제를 해결하기 위해선 어떻게 해야할까요?

1. 외래 키를 삭제하기 전, 해당 테이블의 데이터를 삭제하는 방법이 있나요?
2. 외래 키를 삭제하기 전, 다른 테이블의 데이터를 삭제하는 방법이 있나요?
3. 외래 키를 삭제하기 전, 데이터를 백업하는 방법이 있나요?

제가 궁금한 점을 알려드리겠습니다.

    댓글목록

    profile_image
    나우호스팅  4일 전



    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

  • 개발자 Q&A 포인트 정책
      글쓰기
      50P
      댓글
      10P
  • 전체 11,026건 / 68 페이지

검색

게시물 검색