8.解决MySQL0.33错误3780,有两个外国参考文献

ffdz8vbo  于 2023-04-28  发布在  Mysql
关注(0)|答案(2)|浏览(109)

我在MySQL Workbench中尝试创建下表Tool时收到错误3780:

CREATE TABLE IF NOT EXISTS Recipe (
    Recipe_ID int primary key,
    Author varchar(50),
    Recipe_name varchar(50),
    Recipe_time int, # in minutes
        Prep_time int,
        Cook_time int,
    Recipe_cal int,
    Recipe_fat int,
    Recipe_carbs int,
    Recipe_protein int
);
CREATE TABLE IF NOT EXISTS Tool (
   Tool_ID int primary key,
   Recipe_ID int,
   foreign key (Recipe_ID) references Recipe(Recipe_ID)
);

错误代码:3780外键约束“tool_ibfk_1”中的引用列“Recipe_ID”和被引用列“Recipe_ID”不兼容。我使用的是MySQL版本8。0.33,如SELECT version()所示;
我在Recipe上运行了DESCRIBE,结果如下:

Recipe_ID       varchar(4)  NO  PRI 
Author          varchar(50) YES     
Recipe_name     varchar(50) YES     
Recipe_time     int YES     
Prep_time       int YES     
Cook_time       int YES     
Recipe_cal      int YES     
Recipe_fat      int YES     
Recipe_carbs    int YES     
Recipe_protein  int YES

我还运行了SHOW CREATE TABLE for Recipe。

'Recipe', 'CREATE TABLE `recipe` (\n  `Recipe_ID` varchar(4) NOT NULL,\n  `Author` varchar(50) DEFAULT NULL,\n  `Recipe_name` varchar(50) DEFAULT NULL,\n  `Recipe_time` int DEFAULT NULL,\n  `Prep_time` int DEFAULT NULL,\n  `Cook_time` int DEFAULT NULL,\n  `Recipe_cal` int DEFAULT NULL,\n  `Recipe_fat` int DEFAULT NULL,\n  `Recipe_carbs` int DEFAULT NULL,\n  `Recipe_protein` int DEFAULT NULL,\n  PRIMARY KEY (`Recipe_ID`)\n) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci'

我还运行了DESCRIBE工具,但由于错误,工具还不存在。
我已经研究了一些关于这个问题的溢出线程,并尝试应用这个solution来处理排序规则和字符集。这并没有解决眼前的问题:

CREATE SCHEMA IF NOT EXISTS KITCHEN;
USE KITCHEN;
ALTER DATABASE Kitchen
CHARACTER SET utf8mb4 
COLLATE utf8mb4_unicode_520_ci;

据我所知,两个Recipe_ID都是int,因为当类型不匹配时,许多人都会遇到问题。我将感谢任何建议来解决这个问题。

8i9zcol2

8i9zcol21#

在“Recipe”表中,“Recipe_ID”列的数据类型被指定为varchar(4),但是在“Tool”表中,“Recipe_ID”列的数据类型被指定为int。这种不一致性可能导致您看到的错误。

vjrehmav

vjrehmav2#

我之前在Recipe中将Recipe ID设置为varchar(4)。我试图通过添加int来纠正Tool中外键RecipeID之间的类型不匹配,但由于表已经存在,因此没有进行更新。我通过删除带有varchar ID的Recipe并重新创建较新的Recipe来解决这个问题。

相关问题