0

一度に複数のテーブルを作成していますが、エラー (150) が発生し続けます。

#1005 - テーブル 'waget.tour' を作成できません (errno: 150)

エラーが何であるかを知っているにもかかわらず、それを修正することはできません。テーブル「ツアー」内のすべてのテーブル参照はすべてそこに存在し、外部キーが参照されるキーがあります。何度もチェックしましたが、何も見つかりません。誰かが私が間違っていることを見ることができますか?

(テーブル「ツアー」の作成時にエラーが発生する)

CREATE TABLE IF NOT EXISTS tourPayment(
    tourPaymentNumber int,
    tourCost int(7),
    PRIMARY KEY (tourPaymentNumber),
    KEY (tourCost)
);

CREATE TABLE IF NOT EXISTS hotel(
    hotelID int AUTO_INCREMENT,
    hotelName varchar(30),
    PRIMARY KEY (hotelID),
    KEY (hotelName)
);

CREATE TABLE IF NOT EXISTS salutation(
    salutationID int AUTO_INCREMENT,
    salutation varchar(4),
    KEY (salutation)
);

CREATE TABLE IF NOT EXISTS customer(
    custID int AUTO_INCREMENT,
    custSalutation varchar(4),
    custLname varchar(30),
    custAdd varchar(100),
    custPcode varchar(4),
    custState varChar(20),
    custPhone varchar(10),
    custHotel varchar(30),
    PRIMARY KEY (custID),
    FOREIGN KEY (custHotel) REFERENCES hotel(hotelName),
    FOREIGN KEY (custSalutation) REFERENCES salutation(salutation)
);

CREATE  TABLE IF NOT EXISTS bus(
    busID int AUTO_INCREMENT,
    busMake varchar(30),
    busSeats varchar(3),
    PRIMARY KEY (busID)
);

CREATE TABLE IF NOT EXISTS busDriver(
    driverID int AUTO_INCREMENT,
    driverName varchar(20),
    driverEmail varchar(40),
    busID int,
    PRIMARY KEY (driverID),
    FOREIGN KEY (busID) REFERENCES bus(busID)
);

CREATE TABLE IF NOT EXISTS tour(
    DailyTourID int AUTO_INCREMENT,
    NoOfPeople int(3),
    tourDate DATE,
    tourTime TIME,
    tourName varchar(30),
    tourCost int(7),
    tourDriverID varchar(20),
    PRIMARY KEY (DailyTourID),
    FOREIGN KEY (tourDriverID) REFERENCES busDriver(driverID),
    FOREIGN KEY (tourCost) REFERENCES tourPayment(tourCost)
);

CREATE TABLE IF NOT EXISTS TourCustLink(
    TourCustLinkID int AUTO_INCREMENT,
    TourID int,
    custID int,
    PRIMARY KEY (TourCustLinkID),
    FOREIGN KEY (TourID) REFERENCES tour(DailyTourID),
    FOREIGN KEY (custID) REFERENCES customer(custID)
);
4

4 に答える 4

0

AUTO_INCREMENT フィールドはすべて PRIMARY KEY である必要があるため、敬称を次のように変更してみてください。

CREATE TABLE IF NOT EXISTS salutation(
    salutationID int AUTO_INCREMENT,
    salutation varchar(4),
    PRIMARY KEY (salutationID),
    KEY (salutation)
);

さらに、ツアーでは、tourDriverID のデータ型が間違っています。参照されたキーと一致するように INT にする必要があります

CREATE TABLE IF NOT EXISTS tour(
    DailyTourID int AUTO_INCREMENT,
    NoOfPeople int(3),
    tourDate DATE,
    tourTime TIME,
    tourName varchar(30),
    tourCost int(7),
    tourDriverID INT,
    PRIMARY KEY (DailyTourID),
    FOREIGN KEY (tourDriverID) REFERENCES busDriver(driverID),
    FOREIGN KEY (tourCost) REFERENCES tourPayment(tourCost)
);

SQL フィドルの完全な例は、http ://sqlfiddle.com/#!2/840b9 にあります。

于 2013-04-19T11:29:53.513 に答える
0

実際、テーブルを1つずつ作成してみるのは簡単で、より良いエラーメッセージが表示されます.. salutationAUTO_INCREMENTフィールドを定義する必要があるため、問題はテーブルです(あなたの場合はsalutationID) as KEY and not the field挨拶`

CREATE TABLE IF NOT EXISTS salutation(
   salutationID int AUTO_INCREMENT,
   salutation varchar(4),
   KEY (salutationID) -- here is your error
);
于 2013-04-19T11:29:54.993 に答える
0

これはあなたが実行したコードですか?もしそうなら、エラーはキーである必要がある AUTO_INCREMENT に関するものです。

CREATE TABLE IF NOT EXISTS salutation(
    salutationID int AUTO_INCREMENT,
    salutation varchar(4),
    KEY (salutation)
);

試す:

CREATE TABLE IF NOT EXISTS salutation(
    salutationID int AUTO_INCREMENT,
    salutation varchar(4),
    KEY (salutationID)
);

必要に応じて、その他を FOREIGN KEY にします。

乾杯。

于 2013-04-19T11:30:24.943 に答える