从引用的表中删除行

时间:2012-07-25 03:14:02

标签: sql join delete-row

我有一个应用程序,我需要删除一行。当我删除仍未分配 角色 的用户时,它可以正常工作。

以下是表格:

用户:

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 个答案:

答案 0 :(得分:0)

如果在未为用户分配角色时允许从用户表中删除行,但是您无法删除已分配角色的行,则问题几乎肯定是由于外键约束< / em>设置为RESTRICT。

此处的信息,Wikipedia

设置数据库的人明确阻止在用户具有指定角色时删除用户。如果允许删除而没有其他任何事情发生(没有行动),那么你会在user_role表中有一行指向一个不存在的用户,那会有什么乐趣?还有其他可能性,例如删除用户可以删除所有相应的角色(CASCADE)。

如果这确实是您的问题(约束设置为RESTRICT),那么您需要从user_role表中为给定用户首先物理删除行,然后您应该能够删除用户。