2010-12-17 101 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級聯參照動作,而不是