当前位置: 首页 > 知识库问答 >
问题:

Mysql错误:1215无法添加外键约束

宗政浩慨
2023-03-14

引用的表是“组”(InnoDB)。

它有一个“id”列,定义为INT(11),不可为空,自动递增,主键

引用表为“用户(InnoDB)”

它的group_id列定义为INT(11),不可为空。

在引用表中已经存在一个基于“group_id”列的唯一索引

但是whn正在执行

ALTER TABLE `user`
   ADD CONSTRAINT `user_group` FOREIGN KEY (`group_id`) REFERENCES `group` (`id`)
      ON DELETE CASCADE
      ON UPDATE CASCADE

我出错了

错误:1215无法添加外键约束

我添加db转储

CREATE TABLE IF NOT EXISTS `groups` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(255) NOT NULL,
  `language` varchar(255) NOT NULL,
  `order` int(11) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;

CREATE TABLE IF NOT EXISTS `user` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `group_id` int(11) NOT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `group_id` (`group_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;

检查清单

  1. Db是InnoDB吗?是的
  2. 所有表都是InnoDB吗?是的
  3. 引用表上是否存在唯一索引?是
  4. 引用和引用列是完全相同的类型吗?是

问题很简单:为什么我不能创建这个外键?

更新1:我试着用ON DELETE RESTRICT and nothing changes替换ON DELETE CASCADE,我还试着删除ON DELETE and ON UPDATE an nothing changes

共有1个答案

莫宝
2023-03-14

您的表名中遗漏了s

更改此

   REFERENCES `group` (`id`)

   REFERENCES `groups` (`id`)

演示

 类似资料:
  • 问题内容: 我正在尝试将新模式转发工程到我的数据库服务器上,但是我不知道为什么会收到此错误。我试图在这里搜索答案,但是我发现的所有内容都说是将db引擎设置为Innodb或确保要用作外键的键是它们自己表中的主键。如果我没记错的话,我都做过这两件事。你们还有其他帮助吗? SQL脚本执行完成:语句:成功7次​​,失败1次 这是父表的SQL。 问题答案: 我猜,和/或不完全相同的数据类型和。 也许父表中的

  • 问题内容: 我正在尝试为体育馆管理系统创建数据库,但无法弄清楚为什么会出现此错误。我试图在这里搜索答案,但找不到。 这是父表。 你们能帮我解决这个问题吗?谢谢。 问题答案: 为了将字段定义为,引用的父字段必须在其上定义了索引。 根据有关约束的文档: 参考parent_tbl_name(index_col_name,…) 定义上,和分别。并确保子列定义必须与其父列定义匹配。 更改表定义如下: 更改表

  • 问题内容: 我已经阅读了 Silberschatz的 数据库系统概念 ,第6版。我将在MySQL的OS X上实现第2章所示的大学数据库系统。但是我在创建表时遇到了麻烦。桌子看起来像 __ 创建表将导致以下错误。 在google搜索外键约束之后,我刚刚了解到“外键约束”一词表示来自表中外键列的数据必须存在于表的主键列中。但是我应该在插入数据时遇到此错误。 如果没有,为什么作者让我执行该SQL语句?

  • 关于这个错误,我到处都找过,也看过很多例子,但我还是想不出我的脚本有什么问题。如果这是一个常见的问题,我很抱歉,但到目前为止,搜索它对我没有帮助。剧本如下: 非常感谢你的帮助。

  • 问题内容: 我正在尝试通过使用外键来确保表之间的数据一致性,以便DBMS可以检查错误。但是,由于某些原因,我们似乎无法做到这一点。有什么错误,还有替代方法吗?另外,当我填写具有外键的表时,无法填写为外键保留的字段,对吗?另外,外键是否完全视为键? 问题答案: 最可能的问题是此行: classLeader的数据类型为VARCHAR(255)。这有 匹配数据类型 的引用的列… 。当然,表必须存在,列也