0

行を削除する必要があるアプリケーションがあります。まだ役割が割り当てられていないユーザーを削除するときに完全に機能します。

ここにテーブルがあります:

ユーザー:

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

役割:

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

ユーザーの役割:

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

問題は、それらを使用して削除できないことです

DELETE FROM users WHERE user_id = :id

私は何をする必要がありますか?

4

1 に答える 1

0

ユーザーにロールが割り当てられていないときにユーザー テーブルから行を削除することは許可されているが、ロールが割り当てられている行を削除できない場合、問題はほぼ確実に RESTRICT に設定されている外部キー制約が原因です。

ウィキペディアの情報はこちら。

データベースを設定した人は誰でも、ユーザーに役割が割り当てられている場合にユーザーの削除が行われないように明示的に防止しました。他に何も起こらずに削除が許可されている場合 (NO ACTION)、user_role存在しないユーザーを参照する行がテーブルに表示されます。他にも可能性があります。たとえば、ユーザーを削除すると、対応するすべてのロールが削除される可能性があります (CASCADE)。

これが実際に問題である場合 (制約が RESTRICT に設定されている場合)、最初user_roleに特定のユーザーのテーブルから行を物理的に削除する必要があります。その後、ユーザーを削除できるはずです。

于 2012-07-25T03:19:35.280 に答える