首页 > 解决方案 > 如何修复 MySQL 中的外键错误?

问题描述

我在 Virtualbox 上使用 Ubuntu。我正在尝试为数据库编写 SQL,但是每当我使用外键创建 SQL 时,它总是返回错误

创建表车辆(车辆 ID int、车辆类型 VARCHAR(255)、模型 VARCHAR(255)、发动机尺寸浮动、条件 VARCHAR(255)、价格浮动、主键(车辆 ID)、外键(模型)参考模型(模型));

你能帮我吗?下面是我创建数据库的 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)); 

标签: mysqlsqlforeign-keys

解决方案


问题似乎出在这一段FOREIGN KEY (Model) REFERENCES Models(Model));

Model_ID 是表 Models 的主键,因此语句段应该是 FOREIGN KEY (Model) 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)
);

推荐阅读