DB にテーブルがあり、すべての行には、テーブル内の別の行の ID である親 ID があります (テーブルはツリーのような構造を表します)。テーブルを空にしたいです。でも出演するときは
DELETE FROM table_name WHERE true;
エラーが発生します (外部キー制約)。とにかくテーブルを空にするにはどうすればよいですか?
明確化: テーブル自体ではなく、テーブルの内容全体を削除したい。
DB にテーブルがあり、すべての行には、テーブル内の別の行の ID である親 ID があります (テーブルはツリーのような構造を表します)。テーブルを空にしたいです。でも出演するときは
DELETE FROM table_name WHERE true;
エラーが発生します (外部キー制約)。とにかくテーブルを空にするにはどうすればよいですか?
明確化: テーブル自体ではなく、テーブルの内容全体を削除したい。
外部キー関係を作成するときは、 を指定する必要がありますon delete cascade
。
編集: ここにかなり良いリファレンスがあります: http://en.wikipedia.org/wiki/Foreign_key
ON DELETEの動作を変更できない場合は、テーブルが空になるまでこれを繰り返し行うことができます。
DELETE FROM table_name WHERE id NOT IN (SELECT parent_id FROM table_name)
これでうまくいくはずです:
TRUNCATE table_name;
まず、子を持たない行を削除します。
したがって、id 外部キーが parent_id の場合は、次のようにします。
DELETE FROM table_name WHERE parent_id IS NOT NULL;
次に、残りを削除します。
DELETE FROM table_name;