Perl DBI无法删除记录

时间:2014-03-28 15:48:44

标签: perl sqlite dbi

我有一个包含大约50K产品记录的数据库。其中一个名为price的字段,在某些情况下来自50K记录,该字段的值为0(int)。

首先,我运行一个查询,看看有多少行存在价格0,我得到4K左右,所以我想删除它们。

所以我运行以下代码来删除price = 0

的所有记录
my $dbh = DBI->connect("dbi:SQLite:MainDatabase.db", "", "", {RaiseError => 1, AutoCommit => 1});
$dbh->do("DELETE FROM products WHERE price =0");

我注意到我的数据库文件大小没有改变所以因为我没有任何错误,我再次运行计数查询以查看是否有任何产品的价格= 0

结果为0表示删除记录。

但是,如果我用一些SQLITE浏览器(比如mozilla的浏览器)打开数据库,那么price = 0的所有记录仍然存在,我可以选择它们。

但是,我无法使用perl选择它们。对于perl,这些记录根本不存在。

有人会对此行为有解释吗?

1 个答案:

答案 0 :(得分:2)

数据库不会因为删除某些记录而减小文件大小。他们保存了这个空间,以便将来可以插入新记录。在删除某些行时重构整个数据库只是为了节省几千字节,效率非常低。

有一些方法可以让数据库重新格式化以节省空间,但是你需要担心这一点,这是值得怀疑的。