微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

MySQL FOREIGN KEY约束不正确

我有以下表定义:

CREATE TABLE `async_task` (
  `idasync_task` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
  `idasync_type` int(10) unsigned NOT NULL,
  `priority` tinyint(3) NOT NULL,
  `status` enum('todo','doing','failed') NOT NULL DEFAULT 'todo',
  `iduser` int(11) NOT NULL,
  `date_added` datetime NOT NULL,
  PRIMARY KEY (`idasync_task`),
  KEY `priority_id` (`priority`,`idasync_task`),
  KEY `status_type` (`status`,`idasync_type`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;

我在我的通知表中添加了一个列,我想指向async_task:

ALTER TABLE `notification` ADD COLUMN `async_task_id` BIGINT(20)

当我添加以下外键时:

ALTER TABLE `notification` ADD CONSTRAINT `fk_notification_async_task` 
    FOREIGN KEY (`async_task_id`) REFERENCES `async_task`(`idasync_task`);

我明白了:

ERROR 1005 (HY000): Can't create table `my_database`.`#sql-182_2d` 
(errno: 150 "Foreign key constraint is incorrectly formed")

我看过其他地方,但只发现错误:

>您创建的表未创建(不是这种情况)
>您引用的表不是InnoDB(不是这种情况,通知和async_task都是InnoDB)
>您没有引用整个主键(不是这种情况,唯一的主键是ID列).

还有什么呢?

解决方法:

引用列和引用列的类型必须相同(在这种情况下,包括unsigned属性).

您没有将notification.async_task_id定义为unsigned,因此它是使用(默认)signed创建的.修复此问题,外键不会引发任何错误.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐