2011-08-17 9 views
2

1つのクエリで複数のテーブルから行を削除する適切な方法は何ですか?削除行

私はPHPでこれをやっているので、私が尋ねる理由があります。複数のクエリを使用して各テーブルから一度に1つずつ削除する場合、PHPはデータベースを複数回トリップする必要があります。この方法を使用するとパフォーマンスに影響はありますか?

私はON DELETE CASCADEオプションの承知していますが、これは、すべてのストレージエンジンでは動作しません。また、親レコードを削除するときに子テーブルからすべてのレコードを削除したくない場合もあります。いつものように

答えて

2
DELETE 
    t1, t2 
FROM 
    table1 AS t1 INNER JOIN table2 AS t2 
ON 
    joinCondition 
WHERE 
    whereCondition 

DELETEクエリを持つ:ここに非常に気をつけて

詳細:http://dev.mysql.com/doc/refman/5.5/en/delete.html

+0

複数のテーブルから同時に削除することは好ましくないと聞いています。構文は 'LIMIT'の使用を許可していないためですか? – recount88

+0

一般的には、間違いを犯して意図したよりも多くを削除する方が簡単です。あなたのクエリをうまくテストして、害にならないようにしてください。 – Mchl

+0

複数のクエリを使って1つのクエリを削除すると、速度に違いはありますか? – recount88

0

あなたはこの質問への答えがわからない場合、あなたはサポートしようとするべきではありませんアプリケーション用の多数のRDMS鈍くする。 CASCADEオプションは、関係するすべてのリレーショナルデータベースと同様に利用できます。また、階層データを格納する方法、子レコードを削除する方法を検討する必要があります。

はたとえば、あなたがネストされたセットモデルを使用した場合、「フォルダ」内のすべての「ファイル」を削除しようとしていた場合、それは単に、どのような場合には、

DELETE from files where id > :lft and id < :rgt

の問題であるだろうが、 JOIN削除を使用して複数のテーブルから削除することもできます。しかし、このはRDMSの多くでサポートされていないので、あなたは、カスケードを使用して心配しているならば、あなたは決して削除があなたがDBALを使用している場合でも、すべてのデータベースをaccross結合を使用することができるようになるだろうされていません。

回答

  • そのような教義DBAL(ORMはない)として、DBALを使用して、サポートされている場合カスケードを使用します。
  • 単一のデータベースを選んで、あなたはその上で知っていることで開発しています。
0

私もかつて同様の問題に直面しました。私の解決策は、私自身の最小限の尋ねる質問を書くことでした。ただ1つのクエリとそれはあなたのための残りの部分を行います。ここでは、それがどのようになるです:

//メイン関数

機能の工場($デシベル){$表=配列( 'TABLE1'、 'table2の'、 '表3' を...)。 //鉱山は用テーブル12
にすべての方法を行ってきました(; $ I < '' はsizeof($表); $ i = 0 $ iの++){
削除($デシベル、$表[$ i])と、
}}

//関数を削除..
ファクトリ関数withnアップもsetit得るが4 undestanging酒

($デシベル、$表){

$ SQLの削除= 'delete from'。$ table; if($ db-> query($ sql)){echo ucfirst($ table)。'100%削除完了';

}

}

ザッツすべてが...非あらかじめ定義された挿入配列のために仕事をするために、「あなたのデータエントリーページから配列のサイズを保持しての削除を変更するvaribleクレタ島テーブル 'prepare文に挿入して実行してください。 何らかの方法であなたを助けてくれることを願っています。