我在Virtualbox上使用Ubuntu。我正在尝试为数据库编写SQL,但是每当使用外键创建SQL时,它总是会返回错误
创建表车辆(车辆ID整型,车辆类型VARCHAR(255),型号VARCHAR(255),发动机尺寸浮动,条件VARCHAR(255),价格浮动,主键(车辆ID),外键(型号)参考) Models(Model));
能帮我吗?下面是我用于创建数据库的SQL表语句,因此我的代码中可能存在错误?
CREATE TABLE Models (
Model_ID int NOT NULL,
Manufacturer VARCHAR(255) NOT NULL,
Model_name VARCHAR(255) NOT NULL,
Wheel_Drive_Type VARCHAR(255) NOT NULL,
PRIMARY KEY (Model_ID));
CREATE TABLE Customers (
Customer_ID int NOT NULL,
Customer_name VARCHAR(255) NOT NULL,
Customer_Contact_number VARCHAR(255) NOT NULL,
Customer_Address VARCHAR(255) NOT NULL,
Customer_Email VARCHAR(255) NOT NULL,
PRIMARY KEY (Customer_ID));
CREATE TABLE Vehicles (
Vehicle_ID int NOT NULL,
Vehicle_Type VARCHAR(255) NOT NULL,
Model_name VARCHAR(255) NOT NULL,
Engine_Size float NOT NULL,
Condition VARCHAR(255) NOT NULL,
Price float NOT NULL,
PRIMARY KEY (Vehicle_ID),
FOREIGN KEY (Model) REFERENCES Models(Model_name));
CREATE TABLE Enquiries (
Enquiry_ID int NOT NULL,
Vehicle int NOT NULL,
Customer_ID int NOT NULL,
Additional_information VARCHAR(255) NOT NULL,
PRIMARY KEY (Enquiry_ID),
FOREIGN KEY (Vehicle_ID) REFERENCES Vehicles(Vehicle_ID),
FOREIGN KEY (Customer_ID) REFERENCES Customers(Customer_ID));
CREATE TABLE Sales (
Sales_ID int NOT NULL,
Vehicle_ID int NOT NULL,
Customer_ID int NOT NULL,
Date_of_sale VARCHAR(255) NOT NULL,
Sale_Type VARCHAR(255) NOT NULL,
PRIMARY KEY (Sale_ID),
FOREIGN KEY (Vehicle_ID) REFERENCES Vehicles(Vehicle_ID),
FOREIGN KEY (Customer_ID) REFERENCES Customers(Customer_ID));
答案 0 :(得分:0)
您的SQL在标识符中包含空格,这是不允许的。例如(客户ID)而非(客户ID)。在您的示例代码中都是如此。另外,在使用外键时,请确保您具有相同的类型,包括带符号/无符号。如果您使用的是utf8mb4,则varchar索引限制为191,而不是255,并且您希望使用外键引用的字段也成为索引。 (根据您的版本,此建议可能已过时,但是空格是个问题。)
答案 1 :(得分:0)
您引用的列必须具有索引,但是Model_name
的{{1}}列上没有索引。您需要添加:
Models
INDEX (Model_name)
我建议您从CREATE TABLE Models (
Model_ID int NOT NULL,
Manufacturer VARCHAR(255) NOT NULL,
Model_name VARCHAR(255) NOT NULL,
Wheel_Drive_Type VARCHAR(255) NOT NULL,
PRIMARY KEY (Model_ID)
INDEX (Model_name));
中取出Model_name
列,并用Vehicles
代替。通常最好让外键指向主键。
答案 2 :(得分:0)
问题似乎出在这个细分市场上 FOREIGN KEY(模型)参考模型(模型))
Model_ID是表Models的主键,因此语句段应为 FOREIGN KEY(模型)REFERENCES Models(Model_ID));
此外,外键应该是数据类型相同的引用表的主键。您的车辆的DDL应该如下
CREATE TABLE Vehicles (
Vehicle_ID int,
Vehicle_Type VARCHAR(255),
Model_ID int,
Engine_Size float,
Condition VARCHAR(255),
Price float,
PRIMARY KEY (Vehicle ID),
FOREIGN KEY (Model_ID) REFERENCES Models(Model_ID)
);