2011-08-23 9 views
0

レコードを削除しようとしましたが、制約エラーが発生し、クエリが停止します。または、私は 'delete ignore ...'を使用しますが、警告だけでもクエリは停止します。私は制約のチェックをオフにすることはできません、私は制約なしでレコードを削除する必要があります。たぶんmysqlにはいくつかのコマンドがありますか?私は何も見つかりませんでした。mysqlテーブルからレコードを削除する方法はありますが、制約エラーがあるレコードはスキップしますか?

答えて

3

私は想像することができる唯一の方法は、あなたからの行を返すクエリを記述することです詳細を持っているし、その後マスタテーブルと、このクエリの結果を結合していないテーブルをマスターし、

DELETE FROM table1 t 
INNER JOIN 
(
    SELECT pk_column FROM table1 t1 
    LEFT JOIN details1 d1 ON (d1.fk_column = t1.pk_column) 
    // other LEFT JOIN[s] if you have more detail tables. 
    WHERE d1.pk_column IS NULL 
)a ON t.pk_column = a.pk_column 
のようなもの

アンどのように動作するかはほとんど同じです。WHERE NOT EXISTをチェックしてください。

+1

ありがとうございます。それは他の方法のように思えますが、参加するか外部のハンドラー(スクリプト言語)は例外です。私の特別なケースでは、テーブルに1.5Mのレコードがあるため、参加することは受け入れられません。待ち時間が長くなるので、私は外部ハンドラを使用します。 – z3ple

0

テーブル/制約定義に「on delete cascade」を追加します。

+0

外国の制約を破るレコードを削除したくない場合は、スキップしてください。 – a1ex07

関連する問題