当前位置:  开发笔记 > 编程语言 > 正文

删除所有表命令

如何解决《删除所有表命令》经验,为你挑选了4个好方法。

删除SQLite中所有表的命令是什么?

同样,我想删除所有索引.



1> paxdiablo..:

我不认为您可以在一次点击中删除所有表,但您可以执行以下操作来获取命令:

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

这个输出是一个将为您删除表的脚本.对于索引,只需将表替换为索引即可.

您可以使用该where部分中的其他子句来限制选择哪些表或索引(例如,and name glob 'pax_*'对于以"pax_"开头的那些表格或索引).

您可以将此脚本的创建与在简单的bash(或cmd.exe)脚本中运行它一起组合,因此只能运行一个命令.

如果你不关心数据库中的任何信息,我认为你可以删除它存储在硬盘上的文件 - 这可能更快.我从未测试过这个,但我不明白为什么它不会起作用.


好吧,获取空sqlite数据库的最简单方法就是删除文件,然后连接到它.
因此我的最后一段是@JF.

2> Noah..:

虽然没有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;


令人难以置信的聪明.我们自己开发的增量升级系统只能执行比较版本的脚本,这个技巧不需要对它进行任何改进:)
注意:这可能会在_second_尝试清理数据库时给出奇怪的"数据库文件格式错误"问题(至少使用最新的sqlite),但是如果使用`from sqlite_master where in type('table),似乎可以完美地工作',''index','触发')`.

3> alamodey..:
rm db/development.sqlite3


如果数据库打开了多个连接,则无效.在*nix上只删除名称,连接将继续使用未命名的数据库文件,直到它们关闭其句柄.如果目的是重写模式(删除所有表,创建新表),那么你将遇到麻烦.
这不应该是接受的答案,因为它删除了数据库,其中包括所有存储过程,触发器等,而不仅仅是表.

4> it-west.net..:

我在SQLite和Android上遇到了同样的问题.这是我的解决方案:

List tables = new ArrayList();
Cursor cursor = db.rawQuery("SELECT * FROM sqlite_master WHERE type='table';", null);
cursor.moveToFirst();
while (!cursor.isAfterLast()) {
    String tableName = cursor.getString(1);
    if (!tableName.equals("android_metadata") &&
            !tableName.equals("sqlite_sequence"))
        tables.add(tableName);
    cursor.moveToNext();
}
cursor.close();

for(String tableName:tables) {
    db.execSQL("DROP TABLE IF EXISTS " + tableName);
}

推荐阅读
手机用户2402851335
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有