mysql - 如何修复 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));
解决方案
问题似乎出在这一段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)
);
推荐阅读
- bash - 使用 bash 脚本根据条件在 YAML 中编辑插入值
- regex - 使用 grep,如何将行首与标准输入中的模式匹配
- python - 如何在 Python 中使用 Gmail API 下载密码保护文件
- django - “detail”:“CSRF 失败:CSRF 令牌丢失或不正确。” Django 休息框架
- javascript - 在 react-chartjs-2 中显示 JSON 数据
- javascript - 如何防止脚本从另一个目录下载数据?
- flutter - 为什么横幅广告没有加载到我的颤振应用程序中?
- python - 如何在 Kivy 界面中显示变量文本
- php - 如何在多层次营销中显示2级和3级的推荐
- omnet++ - 为什么车辆数量不增加静脉?