sqlite3っていったいなんなの?

Railsの開発でなにげなく使っているsqlite3、ファイルベースのDBでサーバーいらずってことくらいは分かってたんだけど、いまいちなにが出来るのかよく分からないので簡単にまとめてみた。

以下公式ページhttp://www.sqlite.org/より(英語)
翻訳して下さっている方がいる模様http://www.3rd-impact.net/Document/SQLite/Translation/Current/感謝!

1ファイルで管理できる手軽さ

1つのデータベースに対してファイルをひとつしか作らないので簡単にバックアップや移動ができる。

OSに依存しない

Windowsで作ったsqliteのDBをそのままLinuxからも扱うことができる。

設定不要

他のDBMSでよくあるユーザーや権限、メモリサイズの設定とかはない。逆に調整もできないけど。
公式ページには、sqliteOracleを置き換えるものではなく、fopen()を置き換えるものだと書いてあった。ファイルをDBがわりにするならsqliteを使おう!

最大サイズ

2テラバイトまでとあるが、OSのファイルサイズの壁にぶつかるような。

サーバーレス

サーバーの起動が不要。ローカルのファイルに読み書きする感覚で扱う。プログラムが走っているコンピュータ内で使うことになる。1台のDBサーバーに対して複数のアプリケーションサーバーがあるような構成では使わない。

SQLが使える

あたりまえだけど、標準的なSQLが使える。てか名前にはいってるしねw

データ型

データ型を指定しなくてもよい。

create table entry(title, content)

一応

  1. INTEGER 整数
  2. REAL 浮動小数
  3. TEXT 文字列
  4. 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 AIRGoogle gearsなど、またPHPPython等の言語に標準で組み込まれている。

Viewを作れたりトランザクションがはれたり以外と高機能でびっくり。



続きをあとで…