Mysql 无法创建表,不确定要做什么(错误:150)
我一次创建了多个表,但不断出现错误(150): #1005-无法创建表“waget.tour”(错误号:150) 尽管我知道错误是什么,但我无法修复它。表“tour”中的所有表引用都存在,并且带有引用外键的键。我已经检查了很多次了,但什么也找不到。有人能看出我做错了什么吗 (创建表“tours”时出错)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
自动递增字段都必须是主键,所以请尝试将称呼改为主键
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。很高兴有其他人检查。