我有下表的定义:
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;我在我的notification表中添加了一列,我想指向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")我找过其他地方,但只发现错误是存在的:
还能是什么?
发布于 2018-04-10 14:34:40
引用列和引用列都必须具有相同的类型(在本例中,相同的列包含unsigned属性)。
您没有将notification.async_task_id定义为无符号,因此它是用(默认) signed创建的。修正后,外键就不会产生错误。
发布于 2021-09-02 16:31:53
另外,这两个表的字符集可能不同。做一个“显示创建表table1”和“显示创建表table2”,并注意像默认CHARSET=utf8或默认CHARSET=utf8mb4这样的结尾,它们是不一样的,不能让FKs在它们之间进行指向。
发布于 2020-11-22 19:02:50
我也有同样的问题,我的问题是因为我试图引用的表还没有创建。如果您试图引用的表没有创建,它将返回此错误。先尝试创建引用表,然后再尝试。
https://dba.stackexchange.com/questions/203509
复制相似问题