복붙노트

[SQL] SQL ON DELETE CASCADE, 어떤 방법을 수행하는 삭제 발생?

SQL

SQL ON DELETE CASCADE, 어떤 방법을 수행하는 삭제 발생?

이 같은 데이터베이스에이 개 관계가있는 경우 :

CREATE TABLE Courses (
  CourseID int NOT NULL PRIMARY KEY,
  Course VARCHAR(63) NOT NULL UNIQUE,
  Code CHAR(4) NOT NULL UNIQUE
);

CREATE TABLE BookCourses (
  EntryID int NOT NULL PRIMARY KEY,
  BookID int NOT NULL,
  Course CHAR(4) NOT NULL,
  CourseNum CHAR(3) NOT NULL,
  CourseSec CHAR(1) NOT NULL
);

나는이 같은 둘 사이에 외래 키 관계를 수립 :

ALTER TABLE BookCourses
ADD FOREIGN KEY (Course)
REFERENCES Courses(Code)
ON DELETE CASCADE;

그런 다음 당신이 볼 수있는 BookCourses 관계 참조에서 코스 속성이 과정과 관련하여 코드 속성.

삭제가 삭제 캐스케이드을 수행하는 방법, 두 관계 중 하나에서 발생하면 내 질문은? 나는 과정과 관련하여 튜플을 삭제하는 경우, 그것은 BookCourses 관계에있는 모든 참조 튜플을 삭제하거나 다른 방법으로 주위 것인가?

해결법

  1. ==============================

    1.당신이 테이블 과정에 뭔가를 삭제할 때 캐스케이드 작동합니다. 테이블 과정에 참조가 테이블 BookCourses에 대한 모든 기록은 자동으로 삭제됩니다.

    당신이 테이블 과정에 뭔가를 삭제할 때 캐스케이드 작동합니다. 테이블 과정에 참조가 테이블 BookCourses에 대한 모든 기록은 자동으로 삭제됩니다.

    당신이 테이블 BookCourses에만 테이블에 삭제하려고 할 때 그 자체가 과정에 영향을하지 않습니다

    후속 질문 : 당신은 왜 테이블 카테고리에 CourseID을해야합니까?

    어쩌면 당신은이에 스키마를 구조 조정해야

    CREATE TABLE Categories 
    (
      Code CHAR(4) NOT NULL PRIMARY KEY,
      CategoryName VARCHAR(63) NOT NULL UNIQUE
    );
    
    CREATE TABLE Courses 
    (
      CourseID INT NOT NULL PRIMARY KEY,
      BookID INT NOT NULL,
      CatCode CHAR(4) NOT NULL,
      CourseNum CHAR(3) NOT NULL,
      CourseSec CHAR(1) NOT NULL,
    );
    
    ALTER TABLE Courses
    ADD FOREIGN KEY (CatCode)
    REFERENCES Categories(Code)
    ON DELETE CASCADE;
    
  2. ==============================

    2.다음은이 이전 게시물을 visting 다른 사람에 대한 간단한 예제이지만, 문제의 예를 혼동한다 :

    다음은이 이전 게시물을 visting 다른 사람에 대한 간단한 예제이지만, 문제의 예를 혼동한다 :

    납품 -> 패키지 (한 -> 많은)

    CREATE TABLE Delivery(
        Id INT IDENTITY PRIMARY KEY,
        NoteNumber NVARCHAR(255) NOT NULL
    )
    
    CREATE TABLE Package(
        Id INT IDENTITY PRIMARY KEY,
        Status INT NOT NULL DEFAULT 0,
        Delivery_Id INT NOT NULL,
        CONSTRAINT FK_Package_Delivery_Id FOREIGN KEY (Delivery_Id) REFERENCES Delivery (Id) ON DELETE CASCADE
    )
    

    외래 키 Delivery_Id (패키지)가있는 항목은 FK 관계 (납품)에서 참조 된 개체와 함께 삭제됩니다.

    배달이 삭제 될 때 그래서 패키지는도 삭제됩니다 참조. 패키지가 삭제되면 아무것도 어떤 배달에 발생하지 않습니다.

  3. from https://stackoverflow.com/questions/13444859/sql-on-delete-cascade-which-way-does-the-deletion-occur by cc-by-sa and MIT license