2012-07-25 110 views
0

我有一個應用程序需要刪除一行。當我刪除的用戶仍然沒有分配角色時,它完美地工作。從參考表中刪除一行

下面是表:

用戶:

user_id | user_name | password 
------------------------------ 
    1 | some | some 
    2 | some2 | some2 
    3 | some3 | some3 

角色:

role_id | role_name 
------------------- 
    1 | admin 
    2 | member 

USER_ROLE:

user_id | role_id 
----------------- 
    1 | 1 
    2 | 2 
    3 | 2 

的問題是,我不能使用

DELETE FROM users WHERE user_id = :id 

什麼我需要做刪除?

+1

*爲什麼*你不能這樣做?你有錯誤嗎? – 2012-07-25 03:16:30

回答

0

如果允許您在用戶未分配角色時刪除用戶表中的一行,但無法刪除已分配角色的行,則問題幾乎可以肯定是由於外鍵約束其中設置爲RESTRICT。請點擊這裏Wikipedia

無論誰設置數據庫,都明確阻止了用戶在分配角色時發生的刪除操作。如果允許刪除沒有任何其他事情發生(不採取行動),那麼你會在user_role表中引用一個不存在的用戶行,這會是什麼樂趣?還有其他可能性,例如刪除用戶可能會刪除所有相應的角色(CASCADE)。

如果這確實是你的問題(約束設置爲RESTRICT),那麼你需要在物理上從user_role表中刪除行所給用戶第一,那麼你應該能夠刪除用戶。

+0

如果我改變了約束? – 2012-07-25 11:06:12

+0

當然,這也應該工作。嘗試一下。你沒有提到你在問題中使用了哪個數據庫;可能是因爲不同的系統支持不同類型的約束,所以找到最適合您情況的系統。 – 2012-07-25 14:40:43

+0

工作!非常感謝! – 2012-07-29 07:39:27