2017-09-26 17 views
0

我正在下面很无聊查询FK约束:MySQL的失败,因为那是不应该存在

alter table mytable change user_id user_id varchar(36) null default null, 
add foreign key (user_id) references users(id) on delete set null; 

但它失败,出现以下错误:

#1452 - Cannot add or update a child row: a foreign key constraint fails 
(`mydatabase`.`#sql-602_60f`, CONSTRAINT `#sql-602_60f_ibfk_4` 
FOREIGN KEY (`user_id`) REFERENCES `users` (`id`) ON DELETE SET NULL 

的问题是,外键约束不存在,所以我不能删除它。在表上有三个外键约束(mytable_ibfk_1,mytable_ibfk_2,mytable_ibfk_3),但没有提及名称,并试图删除它会产生另一个错误。

任何想法如何解决这个问题?

+1

看起来问题不在于FK存在并且必须删除,而是您尝试添加它会干扰数据库中无法满足新FK约束条件的现有行。 –

+1

'user_id'中可能存在不存在于引用列'users.id'中的值。 –

+0

哦,对,我现在明白了,谢谢。 – fred2

回答

0

正如Michael Berkowski指出的那样,我错误地理解了错误,这个错误指出了两列中的冲突值,而不是我无法删除的现有幻影约束。

问题的根源在于该列先前已接受空字符串值(''),并且需要将这些值转换为NULL以便将外键约束置于适当位置。

相关问题