programing

MySQL "외부 키 제약 조건이 완전히 형성되었습니다"

randomtip 2022. 10. 3. 21:17
반응형

MySQL "외부 키 제약 조건이 완전히 형성되었습니다"

이 코드에 문제가 있습니다.

CREATE TABLE Reservation (
    Movie_Title varchar(255) NOT NULL,
    Theatre_No int NOT NULL,
    Complex_Name varchar(255) NOT NULL,
    Start_Time datetime NOT NULL,
    CustomerID int NOT NULL,
    Number_of_Tickets int NOT NULL,
    PRIMARY KEY (Movie_Title, Theatre_No, Complex_Name, Start_Time, CustomerID),
    FOREIGN KEY (Movie_Title) REFERENCES Showings(Movie_Title),
    FOREIGN KEY (Theatre_No) REFERENCES Showings(Theatre_No),
    FOREIGN KEY (Complex_Name) REFERENCES Showings(Complex_Name),
    FOREIGN KEY (Start_Time) REFERENCES Showings(Start_Time), /* this line causes error*/
    FOREIGN KEY (CustomerID) REFERENCES Customer(Account_Number)
); 

이 선을 없애면 잘 될 거야

FOREIGN KEY (Start_Time) REFERENCES Showings(Start_Time),

참조표(표시)는 다음과 같습니다.

CREATE TABLE Showings (
    Movie_Title varchar(255) NOT NULL,
    Theatre_No int NOT NULL,
    Complex_Name varchar(255) NOT NULL,
    Start_Time datetime NOT NULL,
    Num_Seats int NOT NULL,
    PRIMARY KEY (Movie_Title, Theatre_No, Complex_Name, Start_Time),
    FOREIGN KEY (Movie_Title) REFERENCES Movie(Title),
    FOREIGN KEY (Theatre_No) REFERENCES Theatre(Theatre_No),
    FOREIGN KEY (Complex_Name) REFERENCES Theatre(Complex_Name)
);

MariaDB 10.1.3을 사용하고 있습니다.

죄송합니다. 만약 이것이 어리석은 실수로 끝난다면, 저는 SQL을 처음 사용하는 사람입니다.감사합니다.

색인화되지 않은 열에 외부 키를 추가할 수 없습니다.

MySQL에는 외부 키 및 참조 키에 대한 인덱스가 필요하므로 외부 키 검사가 빠르고 테이블 스캔이 필요하지 않습니다.

이것은 MySQL 문서이지만 MariaDB 버전에서 실패한 것과 동일한 이유일 수 있습니다.

이 문제는 인덱스를 추가하기만 하면 해결할 수 있습니다.Start_Time의 컬럼Showings테이블.

다만, 그 전에, 이 외부 키를 사용해 무엇을 하려고 하고 있는지를 생각해 주세요.ANY를 참조하고 있습니다.Start_Time에서Showings테이블 작성 시 특정 표시가 아닌 테이블 작성 시.

테이블 설계에 따라 외부 키 만들기Showings테이블의 주요 키는 달성하려는 것이 더 많을 수 있습니다.

CREATE TABLE Reservation (
    Movie_Title varchar(255) NOT NULL,
    Theatre_No int NOT NULL,
    Complex_Name varchar(255) NOT NULL,
    Start_Time datetime NOT NULL,
    CustomerID int NOT NULL,
    Number_of_Tickets int NOT NULL,
    PRIMARY KEY (Movie_Title, Theatre_No, Complex_Name, Start_Time, CustomerID),
    FOREIGN KEY (Movie_Title) REFERENCES Showings(Movie_Title),
    FOREIGN KEY (Theatre_No) REFERENCES Showings(Theatre_No),
    FOREIGN KEY (Complex_Name) REFERENCES Showings(Complex_Name),
    FOREIGN KEY `Showing` (Movie_Title, Theatre_No, Complex_Name, Start_Time) REFERENCES Showings(Movie_Title, Theatre_No, Complex_Name, Start_Time),
    FOREIGN KEY (CustomerID) REFERENCES Customer(Account_Number)
); 

스키마를 정리하는 것부터 시작합니다.aReservation포함시킬 필요가 있다Customer그리고.Showing.aTheater_no를 의미해야 합니다.Complex두 개의 기둥을 사방에 두기 보다는 말이죠. (아마도 다른 것들일 겁니다.)일단 그런 것들을 바로잡으면 FK 문제는 사라질지도 모른다.

언급URL : https://stackoverflow.com/questions/49483651/mysql-foreign-key-constraint-is-incorretly-formed

반응형