3

会社の連絡先、連絡担当者、キャンペーン、会社からの提案、寄付を記録する連絡管理システムを作成しています。

1つの会社に多くの連絡担当者を配置し、多くのキャンペーンで多くの提案を提出し、多くのキャンペーンに寄付することができます。会社に連絡担当者がいて、提案を提出し、寄付をする必要はありません。INSERT、UPDATE、およびSELECTを使用してクエリを正常に作成しましたが、DELETEは使用していません。現在、このクエリを使用して、会社とそのすべての関連データを削除しています。

DELETE organizations.*, contactdetails.*, proposalorg.*, donationorg.*
FROM organizations, contactdetails, proposalorg, donationorg 
WHERE idOrg='$id' AND  
contactdetails.company_id=organizations.idOrg AND 
proposalorg.company_id=organizations.idOrg AND 
donationorg.company_id=organizations.idOrg

このクエリにエラーがあったとしても、会社は削除されないことを私は知っています。より良いオプションとしてDELETECASCADEについて読んだことがありますが、その方法がわかりません。誰かがそれを行う方法について何か考えがあれば、私はそれを本当に感謝します。

4

2 に答える 2

2

カスケード削除を使用するには、テーブル間に外部キー制約を設定する必要があります。次のように、外部キーを定義するときにカスケード削除ルールを設定します。

ALTER TABLE contactdetails ADD
CONSTRAINT FK_contactdetails_company_id FOREIGN KEY (company_id) 
REFERENCES organizations (idOrg)
ON DELETE CASCADE

これにより、組織テーブルから行が削除されたときに、それを参照する行がcontactdetailsにある場合は、それらも削除する必要があることがdbに通知されます。

これが良い考えであるかどうかに関しては、それは意見の問題です。個人的には、削除するつもりがなかった可能性のある大量のデータを誤って削除してしまう可能性があるため、使用するのは好きではありません。しかし、他の人は私が確信していることに同意しないでしょう。

于 2012-12-18T14:34:53.387 に答える
0

「カスケードの削除時」は、外部キー制約とともに使用します。外部キー制約は通常、外部IDに設定されます。これらは、複数のテーブルを結合するために使用するIDです。

カスケードと一緒に外部キー制約を使用する場合、例のように、メインテーブルからのみ削除し、テーブル結合を使用しません。

テーブル構造定義の重要な部分を示していただけますか?

http://dev.mysql.com/doc/refman/5.1/en/innodb-foreign-key-constraints.htmlを参照してください

于 2012-12-18T14:33:43.343 に答える