mysql – 错误代码:1822.无法添加外键constaint.缺少约束索引
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了mysql – 错误代码:1822.无法添加外键constaint.缺少约束索引,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2081字,纯文字阅读大概需要3分钟。
内容图文
![mysql – 错误代码:1822.无法添加外键constaint.缺少约束索引](/upload/InfoBanner/zyjiaocheng/889/9216f669f9fb447ab7bd9ff7e348a404.jpg)
我发现了一些关于错误的线索.但是所有解决方案对我都不起作用.
我创建了2个表用户表和一个用于文章.现在我想存储创建文章的用户和最后一个修饰符的用户.
CREATE TABLE IF NOT EXISTS `testDb`.`users` (
`id` INT NOT NULL AUTO_INCREMENT,
`nickname` VARCHAR(255) NULL,
`first_name` VARCHAR(255) NULL,
`last_name` VARCHAR(255) NULL,
`e_mail` VARCHAR(255) NOT NULL,
`activated` TINYINT(1) NOT NULL DEFAULT 0,
`birth_date` DATE NULL,
`locked` TINYINT(1) NOT NULL DEFAULT 0,
`locked_date_time` DATETIME NULL,
`street` VARCHAR(255) NULL,
`street_number` VARCHAR(255) NULL,
`city` VARCHAR(255) NULL,
`postal_code` VARCHAR(255) NULL,
`country` VARCHAR(255) NULL,
`phone` VARCHAR(255) NULL,
PRIMARY KEY (`id`),
UNIQUE INDEX `user_id_UNIQUE` (`id` ASC)
)
ENGINE = InnoDB
AUTO_INCREMENT = 1;
CREATE TABLE IF NOT EXISTS `testDb`.`articles` (
`id` INT NOT NULL AUTO_INCREMENT,
`name` VARCHAR(255) NULL,
`description` VARCHAR(255) NULL,
`create_user` INT ZEROFILL NOT NULL,
`create_date_time` DATETIME NULL,
`last_modifie_user` INT ZEROFILL NOT NULL,
`last_modifie_date_time` DATETIME NULL,
PRIMARY KEY (`id`),
UNIQUE INDEX `article_id_UNIQUE` (`id` ASC),
INDEX `fk_articles_users1_idx` (`create_user` ASC),
INDEX `fk_articles_users2_idx` (`last_modifie_user` ASC)
)
ENGINE = InnoDB
AUTO_INCREMENT = 1;
ALTER TABLE `testDb`.`articles`
ADD CONSTRAINT `fk_articles_users1`
FOREIGN KEY (`create_user`)
REFERENCES `testDb`.`users` (`id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION,
ADD CONSTRAINT `fk_articles_users2`
FOREIGN KEY (`last_modifie_user`)
REFERENCES `testDb`.`users` (`id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION;
我得到以下错误,但我不明白为什么我应该有一个索引.
错误代码:1822.无法添加外键constaint.缺少引用表’users’中约束’fk_articles_users1’的索引
我活跃了
SHOW ENGINE innodb STATUS;
但这并没有显示出任何错误.
解决方法:
create_user INT UNSIGNED ZEROFILL不能引用id INT,因为它们被视为外键引用的不同数据类型.使它们成为相同的数据类型.
外键关系中列之间允许的唯一数据类型差异是varchar的长度.例如,VARCHAR(10)可以引用VARCHAR(20),反之亦然.
数据类型,大小或字符集的任何其他差异与参照完整性不兼容.
即使在一列而不是另一列上使用ZEROFILL也会使数据类型不兼容.
内容总结
以上是互联网集市为您收集整理的mysql – 错误代码:1822.无法添加外键constaint.缺少约束索引全部内容,希望文章能够帮你解决mysql – 错误代码:1822.无法添加外键constaint.缺少约束索引所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。