mysql - 无法添加外键约束

标签 mysql

我创建了一个数据库“webportal”。这是我的“用户”表脚本

DROP TABLE IF EXISTS `user`;
CREATE TABLE `user` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `username` varchar(255) DEFAULT NULL,
  `password` varchar(255) DEFAULT NULL,
  `firstName` varchar(255) DEFAULT NULL,
  `lastName` varchar(255) DEFAULT NULL,
  `dateRegistered` DATE DEFAULT NULL,
  `skypeID` int(11)  DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8;

这是“目录”表脚本。

DROP TABLE IF EXISTS `catalog`;
create table catalog(
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `user_id` int(11) NOT NULL,
  `link`  VARCHAR(100) NOT NULL,
  `comment`  VARCHAR(100) NOT NULL,
  `inserDate` DATE DEFAULT NULL,
  `content` longblob NOT NULL,
  PRIMARY KEY (`id`),
  CONSTRAINT `fk_catalog` FOREIGN KEY (`user_id`) REFERENCES `user` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

当我尝试在命令行中执行第二个脚本时,出现此错误...

错误 1215 (HY000):无法添加外键约束。 这段代码有什么问题?

最佳答案

看来您使用的是旧版本的 MySQL,您可以在外键字段中添加 INDEX 子句来解决该问题:

DROP TABLE IF EXISTS `catalog`;
create table `catalog`(
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `user_id` int(11) NOT NULL,
  `link`  VARCHAR(100) NOT NULL,
  `comment`  VARCHAR(100) NOT NULL,
  `inserDate` DATE DEFAULT NULL,
  `content` longblob NOT NULL,
  PRIMARY KEY (`id`),
  INDEX (`user_id`),
  CONSTRAINT `fk_catalog` FOREIGN KEY (`user_id`) REFERENCES `user` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

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

相关文章:

php - MySQL tinyint 比较器返回空集

mysql - #1022 重复的外键 - MySQL 错误

mysql - Docker:将mysql数据库拆分到不同数据卷容器中?

c# - 嵌套的 TransactionScope 在测试中失败

mysql - 优化Mysql JOIN查询速度

mysql - 节约资源

mysql - 如何为 MySQL 中的用户授予 CREATE USER 和 GRANT 权限?

mysql - 从 MySQL 到 MS SQL,所有列都无效?

mysql - MySQL 中发票前缀的最佳实践?

mysql - SQL : MAX of summing the values of 2 columns