1

亲爱的,我在 MySQL 中有一个问题:我无法DELETE FROM users where user_id ='1';在 MySQL CLI 中执行。所以我在 phpMyAdmin 中尝试:使用 GUI 删除一行,我得到了这个:

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网站上查找了这个错误,得到:Error: 1451 SQLSTATE: 23000 (ER_ROW_IS_REFERENCED_2)

消息:无法删除或更新父行:外键约束失败(%s)

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

很多谢谢!

4

6 回答 6

7

您有一个医生通过带有on delete no actionor的外键引用此用户on delete restrict。将外键更改为on delete set null(将引用医生的 user_id 设置为 null)或on delete cascade(将医生与用户一起删除),或手动将医生分配给其他用户,然后重新运行查询。

于 2010-12-17T17:46:24.880 回答
1

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

于 2010-12-17T17:45:28.303 回答
1

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

于 2010-12-17T17:45:31.987 回答
1

错误正在给你答案。您尝试从中删除的表与其他一些表之间存在参照完整性链接。创建了一个约束以确保您不会意外删除父行而留下孤儿。

如果医生始终是用户。那么你就不能删除用户,留下一堆没有用户记录的医生。

于 2010-12-17T17:46:04.707 回答
0

这意味着另一个表具有指向该表的外键链接。您不能删除 id 为 1 的用户,因为另一个表引用了该用户。

于 2010-12-17T17:45:53.703 回答
0

原因是您已经创建了一个外键 ('users_ibfk_2'),它引用了要从中删除一行的表中的字段 ('user_id')。但是由于您已经创建了外键,因此删除外键不是一个好的解决方案,因此更好的解决方案是(如果您使用的是 phpmyadmin):

  1. 选择子表
  2. 选择“结构”选项卡
  3. 转到“关系视图”
  4. 将第二个下拉列表(ON DELETE)[在与'doctor_id'对应的行中]更改为'CASCADE'

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

如果您不使用 phpmyadmin :

  1. 删除外键
  2. 改为使用 ON DELETE 级联引用操作添加新外键
于 2014-02-06T08:23:48.397 回答