sqlite3っていったいなんなの?
Railsの開発でなにげなく使っているsqlite3、ファイルベースのDBでサーバーいらずってことくらいは分かってたんだけど、いまいちなにが出来るのかよく分からないので簡単にまとめてみた。
以下公式ページhttp://www.sqlite.org/より(英語)
翻訳して下さっている方がいる模様http://www.3rd-impact.net/Document/SQLite/Translation/Current/感謝!
1ファイルで管理できる手軽さ
1つのデータベースに対してファイルをひとつしか作らないので簡単にバックアップや移動ができる。
設定不要
他のDBMSでよくあるユーザーや権限、メモリサイズの設定とかはない。逆に調整もできないけど。
公式ページには、sqliteはOracleを置き換えるものではなく、fopen()を置き換えるものだと書いてあった。ファイルをDBがわりにするならsqliteを使おう!
最大サイズ
2テラバイトまでとあるが、OSのファイルサイズの壁にぶつかるような。
サーバーレス
サーバーの起動が不要。ローカルのファイルに読み書きする感覚で扱う。プログラムが走っているコンピュータ内で使うことになる。1台のDBサーバーに対して複数のアプリケーションサーバーがあるような構成では使わない。
データ型
データ型を指定しなくてもよい。
create table entry(title, content)
一応
- INTEGER 整数
- REAL 浮動小数
- TEXT 文字列
- BLOB そのまんま
というデータ型があるが、TEXTに数値を入れると文字列とするなど勝手に変換するし、INTEGERに文字列を入れると文字列のまま格納されるのであんまり意味はない。
長さを指定できる。
create table entry(title TEXT(255))
本来はないデータ型を指定できる。
create table entry(title aaa, posted_at datetime)
aaaとdatetimeが型ということになる。おそらく単なるラベルのような意味しかない。sqliteに日付型がないのにARで扱えるのは、テーブル作成時にdatetimeという本来ない型を指定しておいて、ARがテーブルの情報から型変換をしているのではと思う。
カラムへの制約
PK, not null, autoincrementなどRDBMSでよくある制約が使える。ただFK制約ははれない。
インデックスがはれる
Viewを作れる
トランザクションがはれる
ARで試してみた。
puts Entry.find(1) #=> #<Entry id: 1, title: "トランザクションをはれる", created_at: "2008-08-19 15:08:19", updated_at: "2008-08-19 15:08:19"> ActiveRecord::Base.transaction do e = Entry.find(1) e.title = "トランザクションをはれない" e.save raise end puts Entry.find(1) #=> #<Entry id: 1, title: "トランザクションをはれる", created_at: "2008-08-19 15:08:19", updated_at: "2008-08-19 15:08:19">
管理ツール
phpSQLiteAdmin
phpMyAdminのノリでsqlite判。使ったことないけど、文字ばけとかするらしい。
http://www.moongift.jp/2006/07/2001/
SQLiteManager
FireFoxのアドオンとして提供されている。私はこれを使ってる。
https://addons.mozilla.org/ja/firefox/addon/5817
多くのアプリケーションの組み込みDBとして利用されている
Adobe AIRやGoogle gearsなど、またPHPやPython等の言語に標準で組み込まれている。
Viewを作れたりトランザクションがはれたり以外と高機能でびっくり。
続きをあとで…