SQLiteの使い方

スタンドアローンデータベースSQLiteの使い方・覚え書き。

SQLiteのインストール

Windowsへのインストール方法です。

SQLiteより最新のSQLiteをダウンロードします。

  1. Download
    sqlite-install
  2. Precompiled Binaries for Windows>sqlite-tools-win32-x86-3390200.zip(2022.07.26時点)をダウンロード
    sqlite-install

ダウンロードしたファイルを解凍して任意のフォルダに格納します。
下記はC:\sqlite3に格納した場合。

C:\sqlite3
    sqldiff.exe
    sqlite3.exe
    sqlite3_analyzer.exe

SQLiteツールは実行ファイルだけなので、これで利用可能となります。

データベース操作

データベースの操作には、コマンドラインツールsqlite3.exeを使用します。

データベースを作成する

次のコマンドでデータベースを作成します。 <データベース名>はデータベースのファイル名になります。(e.g. sample.db)

sqlite3.exe <データベース名>

この時点でファイルは作成されません。テーブルを追加すると、ファイルが作成されます。

データベースに接続する

データベースに接続する場合も作成時と同じです。
<データベース名>に既存のファイルを指定します。

sqlite3.exe <データベース名>

データベースを抜ける

> .exit

テーブル操作

テーブルの作成

次のようなSQL文でテーブルを作成します。

create table LOGS (id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT
  , registered_at NOT NULL DEFAULT (DATETIME('now', 'localtime'))
  , update_at
  , details VARCHAR NOT NULL);

データ型

指定できる型は次のとおりです。

定義名 内容
NULL NULL
INTEGER 符号付整数.INTの記述でも同じになる
REAL 浮動小数点数
TEXT テキスト.VARCHARの記述でも同じになる
BLOB バイナリデータ

BOOLEANなどの指定も可能です。BOOLEANの場合、実際にはINTEGERで格納されます。trueを設定すれば1falseを設定すれば0が格納されます。

データの格納について

定義した型と異なる値を格納してもエラーとなりません。その場合、行毎に型が異なります。

create table SAMPLE (id INT);
insert into SAMPLE(id) values ('ABC');
insert into SAMPLE(id) values ('1');
insert into SAMPLE(id) values (2);

select id, typeof(id) from SAMPLE;
ABC|text
1|integer
2|integer

AUTOINCREMENTについて

AUTOINCREMENTを指定する場合はINTEGERかつPRIMARY KEYを指定する必要があります。
また、この場合はINTの指定は不可で、INTEGERとしなければなりません。

テーブルの削除

> drop table <テーブル名>;

テーブル一覧を表示

> .tables

create文を表示する

> .schema <テーブル名>

トリガー

更新日時などを自動で挿入したい場合は、トリガーを使用します。
下記はLOGSテーブル更新後に、更新日時カラム(update_at)を設定するトリガーです。

CREATE TRIGGER LOGS_TRIGGER AFTER UPDATE ON LOGS
BEGIN
    UPDATE LOGS SET update_at = datetime('now', 'localtime') WHERE id = OLD.id;
END;

AFTERの代わりにBEFOREを使うとトリガーをイベント実行前に実行します。

トリガー一覧の表示

SELECT * FROM sqlite_master WHERE type = 'trigger';

トリガーの削除

drop trigger <トリガー名>;
このエントリーをはてなブックマークに追加
にほんブログ村 IT技術ブログへ

関連コンテンツ

スポンサードリンク

コメント

メールアドレスが公開されることはありません。