簡體   English   中英

MySQL外鍵問題

[英]MySQL foreign key issue

我的外鍵有一些錯誤,嘗試將數據庫加載到MySQL時遇到問題。 我試圖解決此問題的方法是:-將外鍵放在主鍵之后,例如:

CREATE TABLE IF NOT EXISTS Passenger (
.......
PRIMARY KEY(tNum),
FOREIGN KEY (fNum) REFERENCES Flights(fNum),
FOREIGN KEY (fDate) REFERENCES Flights(fDate),
FOREIGN KEY (sCity) REFERENCES Flights(sCity),
FOREIGN KEY (eCity) REFERENCES Flights(eCity)
);

-以Eg格式捆綁外鍵:

ALTER TABLE Passenger ADD FOREIGN KEY (fNum, fDate, sCity, eCity) REFERENCES Flights(fNum, fDate, sCity, eCity);

我得到的錯誤是:

1005-無法建立表格'airline。#sql-1d7_7c'(錯誤編號:150)

我的完整代碼是:

DROP DATABASE IF EXISTS airline;
CREATE DATABASE IF NOT EXISTS airline;
USE airline;

CREATE TABLE IF NOT EXISTS Flights (
    fNum char(6) not null,
    pID char(4) not null,
    fDate DATE not null,
    eDate DATE  not null,
    sTime char(4) not null,
    lTime char(4) not null,
    sOStart char(4) null,
    sOEnd char(4) null,
    sCity varchar(30) not null,
    eCity varchar(30) not null,
    sOCity varchar(30),
    sNum char(5) not null,
    PRIMARY KEY (fNum)
);

CREATE TABLE IF NOT EXISTS Passenger (
    tNum char(4) not null,
    dPurch DATE not null,
    pMethod varchar(30) not null,
    fNum char(6) not null,
    fDate DATE not null,
    sCity varchar(30) not null,
    eCity varchar(30) not null,
    tType varchar(30) not null,
    Price decimal(4,2) not null,
    iType varchar(30) not null,
    idNum char(8) not null,
    fName varchar(30) not null,
    lName varchar(30) not null,
    Sex char(1) not null,
    pAddress varchar(30) not null,
    pPhone char(8) not null,
    pEmail varchar(30) not null,
    PRIMARY KEY(tNum)
);

CREATE TABLE IF NOT EXISTS Planes (
    pID char(4) not null,
    pType char(3) not null,
    pDesc varchar(30) not null,
    pRange char(4) not null,
    Capacity char(3) not null,
    mDate DATE not null,
    pDate DATE not null,
    sDate DATE not null,
    PRIMARY KEY (pID)
);

CREATE TABLE IF NOT EXISTS Staff (
    sNum char(5) not null,
    sName varchar(30) not null,
    sDOB DATE not null,
    sAddress varchar(30) not null,
    pCompany varchar(30) ,
    pStart DATE ,
    pEnd DATE ,
    jID char(1) not null,
    PRIMARY KEY (sNum)
);

CREATE TABLE IF NOT EXISTS Emergency (
    eID char(5) not null,
    sNum char(5) not null,
    eName varchar(30) not null,
    eAddress varchar(30) not null,
    ePhone char(8) not null,
    eEmail varchar(30) not null,
    eRelationship varchar(30) not null, 
    PRIMARY KEY(eID)
);

CREATE TABLE IF NOT EXISTS Pilot (
    sNum char(5) not null,
    pID char(4) not null,
    cDate DATE not null,
    jID char(1) not null,
    PRIMARY KEY(jID)
);

CREATE TABLE IF NOT EXISTS Attendant (
    sNum char(5) not null,
    tSDate Date not null,
    tFDate Date not null,
    tDesc Varchar(30) not null,
    jID Char(1) not null,
    PRIMARY KEY(jID)
);

ALTER TABLE Flights ADD FOREIGN KEY (pID) REFERENCES Planes(pID);
ALTER TABLE Flights ADD FOREIGN KEY (sNum) REFERENCES Staff(sNum);

ALTER TABLE Passenger ADD FOREIGN KEY (fNum) REFERENCES Flights(fNum);
ALTER TABLE Passenger ADD FOREIGN KEY (fDate) REFERENCES Flights(fDate);
ALTER TABLE Passenger ADD FOREIGN KEY (sCity) REFERENCES Flights(sCity);
ALTER TABLE Passenger ADD FOREIGN KEY (eCity) REFERENCES Flights(eCity);

ALTER TABLE Emergency ADD FOREIGN KEY (sNum) REFERENCES Staff(sNum);

ALTER TABLE Pilot ADD FOREIGN KEY (sNum) REFERENCES Staff(sNum);
ALTER TABLE Pilot ADD FOREIGN KEY (pID) REFERENCES Planes(pID);
ALTER TABLE Pilot ADD FOREIGN KEY (jID) REFERENCES Staff(jID);

ALTER TABLE Attendant ADD FOREIGN KEY (sNum) REFERENCES Staff(sNum);
ALTER TABLE Attendant ADD FOREIGN KEY (jID) REFERENCES Staff(jID);

對我來說,這是第一次失敗

ALTER TABLE Passenger ADD FOREIGN KEY (fDate) REFERENCES Flights(fDate);

嘗試先在Flights.fdate上添加索引,然后再執行外鍵並對其進行其他引用,直到它起作用為止。 讓我知道這是否對您有用,對我有用。

順便說一句,您可能想在那里重新考慮架構。 連接和關系實際上應該僅在整數上完成。 該架構將隨着增長而迅速陷入困境。 另外,也許這只是個人喜好,但我更喜歡first_name而不是fName。 對於其他開發人員來說更容易閱讀,這不是1986年,我們現在可以使用人類可讀的名稱:-)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM