1

私にはグループがあり、各グループには連絡先が関連付けられています。ユーザーがグループを削除するときに、グループが空でない場合は、続行するとそのグループ内のすべての連絡先が削除されることを警告します。とにかく、私の問題はその機能を設定することです。

そのグループに属するすべての連絡先を削除し、グループも削除する方法を見つけようとしました。

続行する前に疑問に思っていますが、外部キーを介してこれを行うための自動化された方法はありますか?

うまくいかない場合、これは私のクエリですが、SQLWorkbenchは次のエラーをスローしています

DELETE c
FROM `list_`.`contacts` AS c
INNER JOIN `list_`.`groups` AS g ON c.group_id = g.id
WHERE g.group = 'School' 
  AND c.user_id = 2;

エラー:

Error Code: 1046 No database selected

ここで本当に混乱しています、私も試しましたc.*

4

4 に答える 4

2

MySQLは、単一のステートメントで複数テーブルの削除をサポートしています-使用:

DELETE c, g
  FROM `list_`.`contacts` AS c
  JOIN `list_`.`groups` AS g ON c.group_id = g.id
                            AND g.group = 'School' 
 WHERE c.user_id = 2;

エラーコード1046に関して、WorkBenchを使用する場合は、[オブジェクトブラウザ]タブの上にあるドロップダウンメニューで適切なデータベース/カタログが選択されていることを確認してください。接続のデフォルトのスキーマ/データベース/カタログを指定できます。Workbenchスプラッシュ画面のSQLDevelopment見出しの下にある[ManageConnections]オプションをクリックします。

于 2010-10-17T04:36:24.443 に答える
1

RDBMSについては述べていませんが、SQL Serverではカスケード削除をオンにすることができますが、そうすることはお勧めしません。危険すぎます。

更新:MySQL InnoDBはカスケード削除もサポートします:外部キー制約

最初にすべての参照行を手動で削除してから、グループを削除する方が安全です。

エラーメッセージ「Error Code: 1046 No database selected」は、TSQLに問題がないことを示しています。データベースを指していますか?

于 2010-10-17T04:16:33.047 に答える
1

Mysqlでは、トリガーに対して次のようなことを試すことができます。

DELIMITER $$
DROP TRIGGER IF EXISTS `deluser`$$

CREATE TRIGGER `deluser` BEFORE DELETE on `biguser`
FOR EACH ROW
BEGIN
DELETE FROM smalluser WHERE id=OLD.id;
END$$

DELIMITER ;

注:トリガーは削除する前に行う必要があります。そうしないと、レコードの削除に使用するキーが失われる可能性があります。

于 2010-10-17T04:33:23.400 に答える
0

トリガーでそれができると思います。

于 2010-10-17T04:15:11.007 に答える