SQLite ですべてのテーブルを削除するコマンドは何ですか?
同様に、すべてのインデックスを削除したいと思います。
DROP ALL TABLES コマンドがないのは事実ですが、次の一連のコマンドを使用できます。
注:これらのコマンドはデータベースを破損する可能性があるため、バックアップがあることを確認してください。
PRAGMA writable_schema = 1;
delete from sqlite_master where type in ('table', 'index', 'trigger');
PRAGMA writable_schema = 0;
次に、削除されたスペースを回復したい
VACUUM;
すべてが問題ないことを確認するための適切なテスト
PRAGMA INTEGRITY_CHECK;
1回のヒットですべてのテーブルを削除できるとは思いませんが、次のコマンドを実行してコマンドを取得できます。
select 'drop table ' || name || ';' from sqlite_master
where type = 'table';
この出力は、テーブルを削除するスクリプトです。インデックスの場合は、テーブルをインデックスに置き換えるだけです。
セクション内の他の句を使用して、where
選択するテーブルまたはインデックスを制限できます ( and name glob 'pax_*'
「pax_」で始まるテーブルまたはインデックスの「」など)。
このスクリプトの作成と単純な bash (または cmd.exe) スクリプトでの実行を組み合わせることができるので、実行するコマンドは 1 つだけです。
DB 内の情報を気にしない場合は、格納されているファイルをハードディスクから削除するだけでよいと思います。おそらくそのほうが速いでしょう。これをテストしたことはありませんが、なぜ機能しないのかわかりません。
rm db/development.sqlite3
delete from sqlite_sequence
自動インクリメントシーケンスをリセットするために実行できる、テーブルの削除とファイルの削除を含む他の回答に追加したいと思います。
すべてのテーブルを削除すると (テーブルが削除されるとインデックスは消えます)、私の知る限り、SQLite データベースには何も残っていませんが、ファイルは縮小していないようです (私が行った簡単なテストから) )。
したがって、ファイルを削除するのが最速のようです。アプリが db ファイルにアクセスしようとしたときに再作成する必要があります。
ビューも削除するには、'view' キーワードを追加します。
delete from sqlite_master where type in ('view', 'table', 'index', 'trigger');