mysql - 如何修复 MySQL 中的外键错误?

标签 mysql sql foreign-keys

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

CREATE TABLE Vehicles (Vehicle ID int, Vehicle Type VARCHAR(255), Model VARCHAR(255), Engine Size float, Condition VARCHAR(255), Price float, PRIMARY KEY (Vehicle ID), FOREIGN KEY (Model) REFERENCES 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)); 

最佳答案

您的 SQL 将空格作为标识符的一部分,这是不允许的。例如 (Customer ID) 而不是 (Customer_ID)。在整个示例代码中都是如此。此外,在使用外键时,请确保您具有相同的类型,包括签名/未签名。如果您使用的是 utf8mb4,则 varchar 索引被限制为 191 而不是 255,并且您希望使用外键引用的字段也是一个索引。 (此建议可能已过时,具体取决于您的版本,但空格是个问题。)

关于mysql - 如何修复 MySQL 中的外键错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55875863/

相关文章:

python - 如何在Python Peewee中手动插入ForeignKeyFields?

MySQL错误代码1248

SQL INSERT、强制截断字段

mysql - 外键引用另一个表中的多行

mysql - 比较sql中的两个值

php - 使用 PHP 的 mySQL 表中的增量主键

mysql - 在 2 个表中的 Id 列和 INSERT 最大值上设置外键约束?

mysql - utf8_general_ci和utf8_unicode_ci有什么区别?

mysql - 在 Mysql 中添加带有 select 语句的 "total sum"行

mysql - MYSQL中如何按三个字符工作日排序