SQLite3の概要
SQLite3というのは軽量なRDBMSです。C言語で書かれてます。特徴としては、データベースをファイルとして扱い、サーバーが不要って点が挙げられます。
リレーショナルデータベースをちょっと使いたいけど、わざわざMySQLを導入するほどではないとか既存のDB環境は汚したくないってときに重宝します。
ただ、当然ですがMySQLではないので、SQL以外のコマンド群、MySQLで言えばSHOWで始まる各種コマンドなどが無く、その代わりにSQLite3専用のコマンドが用意されていたりして、最初は少し戸惑ったので記事としてまとめておきます。今回はとりあえず端末で直接使う場面を想定して書きます。次回の記事で、Pythonライブラリから使う方法を書く予定です。
インストール方法
macの場合。最初からインストールされています。
バージョンを上げたい場合は、Homebrewでもインストールできるようです。
$ brew install sqlite3
Linux (EC2のAmazon Linux2 を想定) の場合、こちらも最初から入っていますが、yumで入れることもできます。
$ sudo yum update
$ sudo yum install sqlite
ディストリビューションによってはyumでは無く、apt-get等別のコマンドのことがあるので確認して入れたほうが良いでしょう。
Windowsの場合、公式サイトのダウンロードページでバイナリファイルが配布されているのでダンロードして使います。
SQLite3の起動と終了
MySQLとかだと接続情報(ユーザー名やパスワード、外部であればホスト名など)を含む長いコマンドを打ち込んで接続しますが、SQLite3はDBファイル名を指定して実行するだけでそのファイルに接続してDBとして使えるようになります。1ファイルが1データベースで、その中にテーブルを作っていくイメージです。MySQLは一つのRDBMSに複数のデータベース(スキーマ)を作れるのでこの点が違いますね。
mydatabase.db というファイルで起動する場合のコマンドは下記です。既存ファイルを指定しても良いし、無ければ新規に作成されます。
sqlite3 を起動するとプロンプトが sqlite> に変わります。
$ sqlite3 mydatabase.db
SQLite version 3.39.5 2022-10-14 20:58:05
Enter ".help" for usage hints.
sqlite>
終了するには、 .exit か .quit を入力します。 .exitの方はリターンコードを一緒に指定することもできます。先頭に.(ドット)が必要なので注意してください。
sqlite> -- 終了コマンド2種類。どちらかで閉じる。
sqlite> .quit
sqlite> .exit
個人的なぼやきですが、sqlite3の入門記事を書く人はSELECT文とかより先に終了方法を書くべきだと思っています。MySQLのノリでquitとかexitとか入れると syntax error が起きます。vimの終了方法並みに重要な知識です。
SQLite3におけるSQLの実行
SQLの実行は特に変わったことがありません。MySQLとほぼ同じように実行できます。
テーブルを作って、データを入れて、それを選択してみましょう。
-- テーブルの作成
sqlite> CREATE TABLE user (
id INTEGER PRIMARY KEY,
name TEXT,
age INTEGER
);
-- データの挿入
sqlite> INSERT INTO user (name, age) VALUES ('Alice', 20);
sqlite> INSERT INTO user (name, age) VALUES ('Bob', 30);
sqlite> INSERT INTO user (name, age) VALUES ('Charlie', 40);
-- データの検索
sqlite> SELECT * FROM user;
-- 以下結果
1|Alice|20
2|Bob|30
3|Charlie|40
データ挿入時に id は指定しませんでしたが勝手に連番入れてくれてます。これはsqlite3の特徴の一つで、すべてのテーブルにはrowidっていう一意の行idが振られていて、 INTEGER PRIMARY KEY の列を作るとその列はrowid列の別名となり、自動的に振られたidが格納されるようになるのです。
DELETE や UPDATEなども他のRDBMSと同様の構文で行えるのですがこの記事では省略します。
SQLite3のコマンド
冒頭に少し書いた通り、SQLite3では、SQL以外にも独自のコマンドがあります。その代わり他のRDBMS固有のコマンドは使えません。SHOWなんとか、と打ちたくなって動かないことに気づいたら思い出しましょう。
そのコマンド群は . (ドット) 始まりになっています。代表的なものをいつくか挙げておきます。
.help
: コマンドの一覧と使用方法を表示.tables
: データベース内のテーブル一覧を表示.schema
: テーブルのスキーマを表示 (指定したテーブルのCREATE TABLE文が見れる).backup
: データベースをバックアップする.import
: CSVファイルなどの外部ファイルからデータを読み込み、テーブルに挿入する.quit
または.exit
: SQLite3コマンドラインツールを終了する- .headers on|off: Selectした結果のヘッダーとして列名を表示するかどうか切り替える。初期設定はoff
一番最初に書いた .help で コマンドを一覧表示できるので一度一通りみておくと良いでしょう。(helpの起動方法が独自コマンドってこれもなかなか初心者に不親切な設計ですよ。)
まとめ
以上の内容を把握しておけば、最低限の用途でSQLite3を利用できるではと思います。
そして、最低限の用途で済まなくなったらSQLite3について詳しくなるよりも他のRDBMSへの移行を検討していくのが良いかなと考えています。簡易版RDBMSですからね。