95

SQLite ですべてのテーブルを削除するコマンドは何ですか?

同様に、すべてのインデックスを削除したいと思います。

4

11 に答える 11

92

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;
于 2009-02-14T01:08:38.190 に答える
89

1回のヒットですべてのテーブルを削除できるとは思いませんが、次のコマンドを実行してコマンドを取得できます。

select 'drop table ' || name || ';' from sqlite_master
    where type = 'table';

この出力は、テーブルを削除するスクリプトです。インデックスの場合は、テーブルをインデックスに置き換えるだけです。

セクション内の他の句を使用して、where選択するテーブルまたはインデックスを制限できます ( and name glob 'pax_*'「pax_」で始まるテーブルまたはインデックスの「」など)。

このスクリプトの作成と単純な bash (または cmd.exe) スクリプトでの実行を組み合わせることができるので、実行するコマンドは 1 つだけです。

DB 内の情報を気にしない場合は格納されているファイルをハードディスクから削除するだけでよいと思います。おそらくそのほうが速いでしょう。これをテストしたことはありませんが、なぜ機能しないのかわかりません。

于 2009-02-08T10:42:27.360 に答える
36
rm db/development.sqlite3
于 2009-02-09T03:41:15.893 に答える
4

delete from sqlite_sequence自動インクリメントシーケンスをリセットするために実行できる、テーブルの削除とファイルの削除を含む他の回答に追加したいと思います。

于 2012-02-09T12:03:05.843 に答える
3

すべてのテーブルを削除すると (テーブルが削除されるとインデックスは消えます)、私の知る限り、SQLite データベースには何も残っていませんが、ファイルは縮小していないようです (私が行った簡単なテストから) )。

したがって、ファイルを削除するのが最速のようです。アプリが db ファイルにアクセスしようとしたときに再作成する必要があります。

于 2009-02-08T14:27:08.123 に答える
0

ビューも削除するには、'view' キーワードを追加します。

delete from sqlite_master where type in ('view', 'table', 'index', 'trigger');
于 2021-01-05T11:06:36.730 に答える