gpt4 book ai didi

MySQL - 无法添加外键约束(1215)

转载 作者:行者123 更新时间:2023-11-29 11:44:17 25 4
gpt4 key购买 nike

我已经使用 mysqldumnp (从 MySQL 5.6.27)创建了一个 SQL 文件,并使用它重新创建数据库(到 MySQL 5.7.9):

CREATE TABLE `my_table` (
`id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
`email` varchar(255) DEFAULT NULL,
`user_id` bigint(20) unsigned DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `user_id` (`user_id`),
CONSTRAINT `my_table_ibfk_1` FOREIGN KEY (`user_id`) REFERENCES `users` (`user_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 ROW_FORMAT=DYNAMIC;

我收到此错误:

[Err] 1215 - Cannot add foreign key constraint

然后我运行查询SHOW ENGINE INNODB STATUS并得到以下形式的“最新外键错误”标题:

2016-02-05 12:27:08 0x7f1b8f54b700 Error in foreign key constraint of table my_db/my_table: FOREIGN KEY (user_id) REFERENCES users (user_id) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 ROW_FORMAT=COMPACT: Cannot resolve table name close to: (user_id) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 ROW_FORMAT=COMPACT

我还尝试在运行 set FOREIGN_KEY_CHECKS = 0; 后运行此 SQL 命令,但仍然遇到相同的错误。

这似乎表明问题在于需要先就位 users 表,然后才能运行此查询。但是,我有 SQL 转储的另一部分(在这部分之前),它具有引用完全相同的表和列的外键约束 - users.user_id - 并且运行时没有任何错误。 p>

所以我是,1)对于为什么会发生这种情况感到困惑并且2)想知道是否有任何方法可以指示 mysqldump 格式化转储文件,以便创建表的命令首先出现在转储文件中,然后添加外键的命令,从而避免该问题包含不存在的表。

注意:我还使用 Navicat 中的数据传输工具在转储文件包含的同一数据库中进行复制,并且运行正常。这似乎表明 Navicat 正在使用管理来处理约束,而尝试使用命令行导入转储文件则不然。

最佳答案

打开 .sql 备份文件并将 my_table 的 SQL 脚本(创建和插入)移至 users 之后,然后再次运行恢复过程。

在创建引用的外键之前,user 表必须存在。

也许其他表也会出现同样的问题,请确保表依赖关系正常。

关于MySQL - 无法添加外键约束(1215),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35224559/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com