#navi(../)
* SQLiteでレコードを削除してもファイルサイズが小さくならない場合の対処 [#afc8cb88]
SQLiteでレコードを削除(DELETE)してもファイルサイズは変わりません。~
これは、削除したエリアをそのままにして再活用するためです。~
従って、開いた(削除した)領域を開放するには、VACUUMというコマンドにより領域の開放を行わないといけません。~
以下に例を記しながら説明します。
尚、操作はUbuntuで行いました。

#contents
#htmlinsertpcsp(db-top.html,db-sp.html)

* 関連記事 [#g03d7ee7]
-[[WindowsにSQLite3のインストール>SQLite/WindowsにSQLite3のインストール]]
-[[CentOSにSQLite3をインストール>SQLite/CentOSにSQLite3をインストール]]
-[[UbuntuにSQLite3をインストール>SQLite/UbuntuにSQLite3をインストール]]

* 使用するデータベースファイルおよびデータ内容 [#jdff266f]
使用するデータベースとデータ内容は以下の通りです。
- 使用するデータベースファイル名はtestdb.sqlite3になります。~
サイズは4096バイトです。
 sakura@ubuntu:~$ ls -l
 合計 4
 -rw-r--r-- 1 sakura sakura 4096  2月  7 10:47 testdb.sqlite3
- SQLite3を起動しテーブル名およびデーブル構成を確認しています。
 SQLite version 3.7.9 2011-11-01 00:52:41
 Enter ".help" for instructions
 Enter SQL statements terminated with a ";"
 sqlite> .tables
 t1
 sqlite> .schema t1
 CREATE TABLE t1 (
 a,
 b,
 c
 );
 sqlite> select count(*) from t1;
 88
 sqlite> .q

* 実際にレコード削除してみる [#k81fc818]
-DELETEで全レコードを削除しました。
 sakura@ubuntu:~$ sqlite3 testdb.sqlite3
 SQLite version 3.7.9 2011-11-01 00:52:41
 Enter ".help" for instructions
 Enter SQL statements terminated with a ";"
 sqlite> delete from t1;
 sqlite> select count(*) from t1;
 0
 sqlite> .q
-ファイルサイズは変わっていません。
 sakura@ubuntu:~$ ls -l
 合計 4
 -rw-r--r-- 1 sakura sakura 4096  2月  7 10:48 testdb.sqlite3

* VACUUMコマンドを実行しファイルサイズを確認する [#a38ee72a]
vacuum;コマンドを実行したあとの結果です。~
ファイルサイズが小さくなっているのが確認できます。~
つまり空きエリアを開放したのが確認できました。
 sakura@ubuntu:~$ sqlite3 testdb.sqlite3
 SQLite version 3.7.9 2011-11-01 00:52:41
 Enter ".help" for instructions
 Enter SQL statements terminated with a ";"
 sqlite> vacuum;
 sqlite> .q
 sakura@ubuntu:~$ ls -l
 合計 4
 -rw-r--r-- 1 sakura sakura 2048  2月  7 10:50 testdb.sqlite3

以上、SQLiteで削除してもファイルサイズが小さくならない場合の対処方法でした。

#htmlinsertpcsp(db-btm.html,db-sp.html)

トップ   編集 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS