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
'programing' 카테고리의 다른 글
다른 테이블에서 한 값을 선택한 경우 (0) | 2022.10.03 |
---|---|
레지스트리 키를 여는 동안 Java 오류 발생 (0) | 2022.10.03 |
MariaDB가 지원할 수 있는 최대 레코드 수 (0) | 2022.10.03 |
오브젝트가 Promise인지 확인하는 방법 (0) | 2022.10.03 |
명령줄에서 mysql 원격 데이터베이스 액세스 (0) | 2022.10.03 |