2010-12-17 133 views
0

亲爱的所有人,我在MySQL中遇到问题: 我在MySQL CLI中未能执行DELETE FROM users where user_id ='1';。 于是,我就在phpMyAdmin的: 使用GUI删除行,我得到这个:无法删除表中的一行(MySQL)

SQL查询:

DELETE FROM `health_portal`.`users` WHERE `users`.`user_id` =1 

MySQL表示:文件

Cannot delete or update a parent row: a foreign key constraint fails (`health_portal`.`users`, CONSTRAINT `users_ibfk_2` FOREIGN KEY (`doctor_id`) REFERENCES `users` (`user_id`)) 

我抬头一看这个错误在Mysql网站并得到: 错误:1451 SQLSTATE:23000(ER_ROW_IS_REFERENCED_2)

消息:不能de lete或更新父行:外键约束失败(%s)

我不知道这里出了什么问题,希望任何人都可以给我一个提醒。

很多thx!

回答

6

你有一位医生通过一个外键引用该用户on delete no actionon delete restrict。将外部密钥更改为on delete set null(将参考医生的user_id设置为空)或on delete cascade(与用户一起删除医生)或手动将医生分配给不同的用户,然后重新运行您的查询。

+0

非常感谢。现在我的问题解决了!谢谢!!! – manxing 2010-12-17 18:11:34

1

还有一个表正在使用该用户(user_id为1),并且该行需要删除,然后才能将该用户从用户表中删除。

+0

我应该知道我没有键入快到足以得到这个答案:P – Shaded 2010-12-17 17:46:45

1

你有一张表(医生,我假设)引用该行与外键约束。您必须先删除医生才能删除该用户。或者添加一个删除级联到外键约束。

0

这意味着另一个表有一个外键链接到这个。您无法删除ID为1的用户,因为另一个表引用此用户。

1

错误给你的答案。在您试图删除的表与其他表之间存在引用完整性链接。创建了一个约束,以确保您不会意外删除父行,将孤儿留在后面。

如果医生总是用户。然后你不能删除留下一堆没有用户记录的医生的用户。

0

原因是您已经创建了一个外键('users_ibfk_2'),该外键引用表中要从中删除行的字段('user_id')。 但你已经创建了一个外键,以便消除外键是不是一个很好的解决方案,所以 一个更好的解决办法是(如果你使用phpMyAdmin):

  1. 选择子表
  2. 选择“结构”标签
  3. 去‘’[对应于行中
  4. 改变所述第二下拉列表(ON DELETE)‘doctor_id’]的关系图,以‘CASCADE’

现在通过deleti在父表中的一行中,子表中的对应行将被删除。

,如果你不使用phpMyAdmin:

  1. 删除外键
  2. 添加一个新的外键具有ON DELETE级联参照动作,而不是