MySQL建表报#1072 Key Column不存在错误问题问询
错误原因
- 核心错误是你在声明外键约束前,没有先在
WebsiteTasks表中定义对应的外键列:WS_UserID和WS_TaskTypeID。MySQL要求外键约束指向的列必须是当前表已存在的列,不能只在定义外键时临时声明。 - 额外注意:外键列的字段类型、属性必须和父表关联的主键完全一致,你关联的两个父表主键都是
INT(10) UNSIGNED类型,外键列也需要保持相同的属性,否则补全列后也会报类型不匹配错误。
修复方案
先声明两个外键列,再定义外键约束即可,修正后的建表语句如下:
CREATE TABLE WebsiteTasks ( WS_TaskID INT(10) UNSIGNED AUTO_INCREMENT PRIMARY KEY, -- 先声明外键列,类型和父表主键完全匹配 WS_UserID INT(10) UNSIGNED NOT NULL, WS_TaskTypeID INT(10) UNSIGNED NOT NULL, -- 定义外键约束,可自定义约束名方便后续维护 FOREIGN KEY `fk_task_user` (WS_UserID) REFERENCES WebsiteUsers (WS_UsersID), FOREIGN KEY `fk_task_type` (WS_TaskTypeID) REFERENCES WebsiteTaskTypes(WS_TaskTypeID), WS_TaskActive BOOLEAN NOT NULL DEFAULT 1, WS_TaskCompletedBy INT(10) UNSIGNED COMMENT 'User who completed task', WS_TaskCreated DATETIME, WS_TaskModified DATETIME ) CHARSET=utf8mb4 ENGINE=InnoDB;
如果需要外键支持级联删除/更新,可以在约束末尾补充ON DELETE CASCADE、ON UPDATE CASCADE等规则,按需添加即可。
内容的提问来源于stack exchange,提问作者Shadow0013
相关产品推荐
相关产品推荐

