我在尝试创建表时出现此错误: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/