MySQL外键错误1005

标签 mysql sql innodb

我在尝试创建表时出现此错误:Can't create table users_groups (errno: 150)

我的脚本:

CREATE TABLE `users_groups` (
  `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
  `user_id` int(11) unsigned NOT NULL,
  `group_id` mediumint(8) unsigned NOT NULL,
  PRIMARY KEY (`id`),
  KEY `fk_users_groups_users1_idx` (`user_id`),
  KEY `fk_users_groups_groups1_idx` (`group_id`),
  CONSTRAINT `uc_users_groups` UNIQUE (`user_id`, `group_id`),
  CONSTRAINT `fk_users_groups_users1` FOREIGN KEY (`user_id`) REFERENCES `users` (`id`) ON DELETE CASCADE ON UPDATE NO ACTION,
  CONSTRAINT `fk_users_groups_groups1` FOREIGN KEY (`group_id`) REFERENCES `groups` (`id`) ON DELETE CASCADE ON UPDATE NO ACTION
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

最佳答案

错误150与外键定义有关。

您没有提到 MySQL 版本,但这里有一些要检查的事项:

  • 表应该存在,其存储引擎应该都是InnoDB
  • 引用的列应该存在
  • 引用列的索引应该存在于引用表中
  • 索引的定义(包括列顺序)应与外键的定义相匹配
  • 引用列的数据类型应该相同(包括长度、空值等...)

MySQL 的文档说可以在错误 150 之后使用“SHOW ENGINE INNODB STATUS”命令来获取有关错误本身的更多信息。我建议你试试看。在输出中,搜索“LATEST FOREIGN KEY ERROR”部分。

关于MySQL外键错误1005,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20837905/

相关文章:

mysql - 使用 JOINS、ORDER BY 和数据透视表

mysql - 无法在 MySQL 中创建关系

mysql - xtradb vs innodb

java - 测量 Java 应用程序中的 sql 执行时间

php - INSERT where 不存在于 php 脚本中,比较 2 个表

Mysql查询没有优化而且很慢,但是为什么?

Mysql inner join 计数查询速度太慢

mysql - 优化不存在的 SQL 查询

php - 如何在没有 cpanel 访问权限的情况下导出 mysql 数据库

php - Cakephp 如何仅按日期和月份订购