Mysql 无法创建表,不确定要做什么(错误:150)

Mysql 无法创建表,不确定要做什么(错误:150),mysql,create-table,Mysql,Create Table,我一次创建了多个表,但不断出现错误(150): #1005-无法创建表“waget.tour”(错误号:150) 尽管我知道错误是什么,但我无法修复它。表“tour”中的所有表引用都存在,并且带有引用外键的键。我已经检查了很多次了,但什么也找不到。有人能看出我做错了什么吗 (创建表“tours”时出错) 自动递增字段都必须是主键,所以请尝试将称呼改为主键 CREATE TABLE IF NOT EXISTS salutation( salutationID int AUTO_INCREM

我一次创建了多个表,但不断出现错误(150):

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

尽管我知道错误是什么,但我无法修复它。表“tour”中的所有表引用都存在,并且带有引用外键的键。我已经检查了很多次了,但什么也找不到。有人能看出我做错了什么吗

(创建表“tours”时出错)


自动递增字段都必须是主键,所以请尝试将称呼改为主键

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 fiddle示例:

自动增量字段都需要是主键,所以请尝试将称呼改为主键

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 fiddle示例可以在这里找到:

实际上,一个接一个地创建表很容易,您会得到更好的错误消息。。 您的问题在于表
saltation
,因为您必须将自动增量字段(在您的示例中是
saltationid)定义为键,而不是字段
saltation`

CREATE TABLE IF NOT EXISTS salutation(
   salutationID int AUTO_INCREMENT,
   salutation varchar(4),
   KEY (salutationID) -- here is your error
);

实际上,一个接一个地创建表是很容易的,您会得到更好的错误消息。。 您的问题在于表
saltation
,因为您必须将自动增量字段(在您的示例中是
saltationid)定义为键,而不是字段
saltation`

CREATE TABLE IF NOT EXISTS salutation(
   salutationID int AUTO_INCREMENT,
   salutation varchar(4),
   KEY (salutationID) -- here is your error
);

这是你运行的代码吗?如果是这样,则错误是关于需要作为键的自动增量

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 (salutation)
);
尝试:

如果需要,还可以将另一个设置为外键

干杯。

这是你的问题:

FOREIGN KEY (tourDriverID) REFERENCES busDriver(driverID)
引用INT,但声明为varchar(20)

这是您的问题:

FOREIGN KEY (tourDriverID) REFERENCES busDriver(driverID)

引用一个INT,但声明为varchar(20)

外键(tourDriverID)引用总线驱动程序(driverID)
-
tourDriverID
是一个
varchar(20)
driverID
是一个
INT
。这可能是问题的原因。@ReallyGoodPie tourDriverID varchar(20)是在tour中定义varchar,但busDriver.driverID是INT。
外键(tourDriverID)引用busDriver(driverID)
-
tourDriverID
varchar(20)
driverID
INT
。这可能是问题的原因。@ReallyGoodPie tourDriverID varchar(20)是在tour中定义varchar,但busDriver.driverID是INT。我认为第二点不正确。第一个是非常好的论点。谢谢。有时候我经历了很多事情,却完全错过了:c。很高兴让其他人检查。我认为第二点是不正确的。第一个是非常好的论点。谢谢。有时候我经历了很多事情,却完全错过了:c。很高兴有其他人检查。