无法创建表,不确定该怎么做(错误:150)

时间:2013-04-19 11:25:38

标签: mysql create-table

我一次创建了几个表,我不断收到错误(150):

  

#1005 - 无法创建表'waget.tour'(错误号码:150)

尽管我知道错误是什么,但我根本无法修复它。表“tour”中的所有表引用都存在且存在,其中引用了外键的键。我经过多次检查,根本找不到任何东西。谁能看到我做错了什么?

(创建表“游览”时出错)

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 个答案:

答案 0 :(得分:3)

这是你的问题:

FOREIGN KEY (tourDriverID) REFERENCES busDriver(driverID)

引用INT但声明为varchar(20)

答案 1 :(得分:0)

AUTO_INCREMENT字段都需要是PRIMARY KEY,所以尝试更改称呼为

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

此外,在tour中,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

答案 2 :(得分:0)

实际上,逐个尝试创建表很容易,你会得到一个更好的错误信息.. 您的问题是表salutation,因为您必须定义AUTO_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
);

答案 3 :(得分:0)

这是您运行的代码吗?如果是这样,那么错误就是需要成为Key的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。

干杯。