SQLiteman のインストールと利用(Windows 上)
SQLitemanshe は,SQLite 3 のデータベースを操作する機能を持った優れたソフトウェア. Windows 版,Linux 版,Max OS X 版がある.ソースコードも配布されている. 下記の操作を行う手順を,説明する.
- SQLiteman Windows 版のインストール
- SQLite 3 のデータベースの新規作成 (Create a new SQLite database)
- 既存のデータベースを開く
- SQL の編集と実行
- データのブラウズ
テーブルの一覧表示と中身の表示と更新(行の削除,値の変更.SQL でなく,グラフィカル・ユーザインタフェースを使用,
あらかじめ決めておく事項
このページでは,データベースの生成を行うので, 生成するデータベースのデータベース名を決めておくこと. このページでは,次のように書く.
- データベース名: hoge.db
データベース名は,自由に決めてよいが,半角文字(つまり英字と英記号)を使い,スペースを含まないこと,
- SQLiteman プログラムを置くディレクトリ:
- Windows の場合: C:\SQLite
自由に決めてよいが,半角文字(つまり英字と英記号)を使い,スペースを含まないこと,
この Web ページで行うこと
- Sqliteman Windows 版のインストール
インストール・ディレクトリ: C:\SQLite
- SQLiteman の起動と終了
- SQLiteman で SQLite 3 のデータベースの新規作成
- SQLiteman で既存のデータベースを開く
- SQL を用いたテーブル定義と一貫性制約の記述
リレーショナル・スキーマ:
orders(id, year, month, day, customer_name, product_id, qty, created_at)
SQL プログラム:
create table orders ( id INTEGER PRIMARY KEY autoincrement not null, year INTEGER not null CHECK ( year > 2008 ), month INTEGER not null CHECK ( month >= 1 AND month <= 12 ), day INTEGER not null CHECK ( day >= 1 AND day <= 31 ), customer_name TEXT not null, product_id INTEGER not null, qty INTEGER not null DEFAULT 1 CHECK ( qty > 0 ), created_at DATETIME not null );
- SQL を用いたテーブルへの行の挿入
begin transaction; insert into orders values( 1001, 2022, 1, 26, 'kaneko', 1, 10, datetime('now', 'localtime') ); insert into orders values( 1002, 2022, 1, 26, 'miyamoto', 2, 2, datetime('now', 'localtime') ); insert into orders values( 1003, 2022, 1, 27, 'kaneko', 3, 8, datetime('now', 'localtime') ); insert into orders values( 1004, 2022, 1, 27, 'kaneko', 3, 8, datetime('now', 'localtime') ); commit;
「now」は,現在の日時を取得する SQLite の関数
「datetime」は,日時のデータを「YYYY-MM-DD HH:MM:SS」形式の文字列に変換する SQLite の関数
- 一貫性制約に違反する更新ができないことの確認
- SQL 問い合わせの発行と評価結果の確認
SELECT * FROM orders; SELECT * FROM orders WHERE day = 26; SELECT * FROM orders WHERE customer_name = 'kaneko'; SELECT * FROM orders WHERE unit_price > 2;
- SQL を用いた更新
「
UPDATE ... SET ...」は更新.ここには 1つの SQL 文を書き, 「begin transaction」と「commit」で囲む. begin transaction; UPDATE orders SET qty=12, updated_at=datetime('now', 'localtime') WHERE id = 1; commit;
- SQL を用いた行の削除
「DELETE FROM ... WHERE ...」は行の削除.ここには 1つの SQL 文を書き, 「begin transaction」と「commit」で囲む.
begin transaction; DELETE FROM orders WHERE id = 2; commit;
- SQLiteman を用いたデータのブラウズ
- テーブルの CSV ファイル形式データのインポート
- SQL を用いた行の削除
Sqliteman Windows 版のインストール
- 新しいディレクトリ C:\SQLite を作る
ここに データベースファイルを置くことにする.
- Sqliteman を入手したい.SourceForge のウェブページを開く
- 「Files」をクリック
- 「sqliteman」をクリック
- 最新版が欲しいので,「1.2.2」をクリック
- Windows 版が欲しいので「Sqliteman-1.2.2-win32.zip」をクリック
- ダウンロードが始まる
- ダウンロードした .zip ファイルを展開(解凍)する.
以下、C:\SQLiteに展開(解凍)したとして説明を続ける
- 確認のため、sqliteman.exe を試しに実行してみる.
新しい画面が開くので確認する.
Ubuntu での Sqliteman のインストール (Install Sqliteman on Ubuntu)
Ubuntu での Sqliteman のインストールは,次のコマンドにより行う.
sudo apt -y update
sudo apt -y install sqliteman
SQLiteman の起動と終了
- SQLiteman の起動
* Windows での SQLiteman の起動例
Windows での操作例
SQLiteman の新しいウインドウが開く.
* Ubuntu での SQLiteman の起動例
端末を開き,「sqliteman」
SQLiteman の新しいウインドウが開く.
- ヘルプの表示
「Help」→ 「Help Content」でヘルプが表示される.
- 終了
「File」→ 「Exit」で終了.
SQLiteman で SQLite 3 のデータベースの新規作成
以下の手順で,新しいデータベースを作成する.その結果,データベースファイルができる.
ここでの設定
- 生成したいデータベースファイル名: C:\SQLite\hoge.db
* 書き込み権限のあるディレクトリを使用するのが良い
- sqliteman を起動する
Windows での操作例
- データベースを生成したいので
「File」→
「New」
と操作する
- データベースの新規作成を開始する
* Windows での実行例(データベースファイル名を「hoge.db」にする場合) ディレクトリと、データベースファイル名を指定.「保存」をクリック
* 以下の例では「C:\SQLite\hoge.db」を指定している).
* データベースファイル名は何でも良いが、英語の名前がよい.
* データベースを新規作成したいときは,データベースファイル名として「新しい」ものを指定すること
* Ubuntu での実行例(データベースファイル名を「mydb」にする場合)
データベースファイル名である mydb を指定し, 「保存」をクリック
* データベースファイル名は何でも良いが、英語の名前がよい.
* データベースを新規作成したいときは,データベースファイル名として「新しい」ものを指定すること
SQLiteman で既存のデータベースを開く
すでに作成済みのデータベースを,下記の手順で開くことができる.
以下の手順で,既存のデータベースファイルを開く.
- sqliteman を起動する
Windows での操作例
- データベースをオープンしたいので,「File」→「Open」と操作する.
- オープンしたいデータベースのデータベースファイル名(下の図では hoge.db)を選び,
「開く」をクリック
- データベースの中身が表示されるので確認する
- テキスト・エンコーディングの設定を確認する
まず,「Pragmas」をクリック.
encodingの行に「UTF-8」のように表示されている.
* もし,データベースの文字のエンコーディングを変えたいときは, SQLiteman のようなグラフィカルなツールを使うのではなく, sqlite.exe を起動し「PRAGMA encoding=...;」で変える方がずっと簡単でしょう. 例えば「UTF-16le」などに変えたいなど.
- もしテーブルを作成済みならば、「Tables」を展開すると,テーブルの一覧 (List of Tables) が表示されるので確認する
- もしテーブルを作成済みならば、「System Catalogue」を展開し,「sqlite_master」をクリックすると,データベース・スキーマ (database schema) が表示される
SQL を用いたテーブル定義と一貫性制約の記述
SQL を用いて,orders テーブルを定義し,一貫性制約を記述する.
リレーショナル・スキーマ
orders(id, year, month, day, customer_name, product_id, qty, created_at)
- sqliteman を実行する.
- データベースをオープンしたいので,「File」→「Open」と操作する.
- オープンしたいデータベースのデータベースファイル名(下の図では mydb)を選び,
「開く」をクリック.
- テーブル定義
SQL編集画面に,次のような SQL を書く
create table order_records ( id integer primary key not null, year integer not null CHECK ( year > 2008 ), month integer not null CHECK ( month >= 1 AND month <= 12 ), day integer not null CHECK ( day >= 1 AND day <= 31 ), customer_name text not null, product_name text not null, unit_price real not null check ( unit_price > 0 ), qty integer not null default 1 check ( qty > 0 ), created_at timestamp with time zone not null, updated_at timestamp with time zone, check ( ( unit_price * qty ) < 200000 ) );
* 「SQL Editor」のウインドウには,SQL プログラムを書くことができる.
- マウスカーソルを先頭に移して(先頭部分をクリック)から、「実行ボタン (Run SQL)」をクリック
- コンソールの確認
エラーメッセージが出ていないことを確認
- 「Tables」を展開し,いま定義したテーブル「order_records」をダブルクリック.すると,テーブル編集画面が開く.テーブルの中身は空である.
これで,テーブル定義がうまくいったことを確認.
SQL を用いたテーブルへの行の挿入
次のような orders テーブルを作る.

以下の手順で,SQL を用いてorder records テーブルへの行の挿入を行う
- SQL 文の記述
「insert into ...」は行の挿入.ここには 4つの SQL 文を書き, 「begin transaction」と「commit」で囲む.
* つまり, 挿入の前に begin transaction; を実行し,一連の挿入が終わったら commit; を実行する.
begin transaction; insert into orders values( 1001, 2022, 1, 26, 'kaneko', 1, 10, datetime('now', 'localtime') ); insert into orders values( 1002, 2022, 1, 26, 'miyamoto', 2, 2, datetime('now', 'localtime') ); insert into orders values( 1003, 2022, 1, 27, 'kaneko', 3, 8, datetime('now', 'localtime') ); insert into orders values( 1004, 2022, 1, 27, 'kaneko', 3, 8, datetime('now', 'localtime') ); commit;
insert into には 2つの方法がある.
* 属性の値を,テーブル定義の順に全て並べる
insert into orders values( 1, 2022, 1, 26, 'kaneko', 'orange A', 1.2, 10, datetime('now', 'localtime'), NULL );
* 属性の値の並び方を,属性名を使って明示的に指定する
このとき,属性値を省略すると,テーブル定義のときに指定されたデフォルト値が使われる
insert into orders (year, month, day, customer_name, product_name, unit_price, qty, created_at) values( 2022, 1, 26, 'miyamoto', 'Apple M', 2.5, 2, datetime('now', 'localtime') );
- 複数の SQL 文の一括実行
複数の SQL 文を一括実行したいので,カーソルを先頭行に移動した後に,「Run multiple SQL statements ...」のボタンをクリックする.
- 「Script Output」ウインドウの確認
エラーメッセージが出ていないことを確認
一貫性制約に違反する更新ができないことの確認
ここでは,一貫性制約に違反するような更新を試みる.データベース管理システムソフトウェアが一貫性を維持するので, 一貫性制約に違反するような更新はできない.
主キー制約 (PRIMARY KEY)
begin transaction;
insert into orders values( 1003, 2018, 4, 30, 'kaneko', 1, 3, datetime('now', 'localtime') );
ROLLBACK;
* すでに属性 id には 3 という値がある. 主キー制約「PRIMARY KEY」に違反.


非空制約 (not null)
begin transaction;
insert into orders values( 1005, 2018, 4, 30, NULL, 1, 3, datetime('now', 'localtime') );
ROLLBACK;
* 非空制約「not null」. 属性 customer_name には NULL を入れることができない.


その他の一貫性制約
一貫性制約に違反する例
begin transaction;
insert into orders values( 1006, 1009, 10, 30, 'kaneko', 1, 3, datetime('now', 'localtime') );
ROLLBACK;
* 制約「CHECK ( year > 2008 )」に違反


SQL 問い合わせの発行と評価結果の確認
ここでは,SQL を用いた問い合わせの実行例を示す. SQL 問い合わせの詳細については,別の Web ページで説明する.ここでは,テーブルの中身を確認して欲しい.
テーブルの全ての行の表示
SELECT * FROM orders;


条件を満足する行のみの表示
SELECT * FROM orders WHERE product_id = 3;

SELECT * FROM orders WHERE customer_name LIKE 'k%';
LIKE は文字列のパターンマッチ

SELECT * FROM orders WHERE qty >= 10;

SELECT * FROM orders WHERE qty < 10 AND customer_name = 'kaneko';

SQL を用いた更新
SQL を用いたデータの更新 (update)の実行例を示す. 「UPDATE <table-name> SET <attribute-name>=<expression> WHERE <expression>」の形をした SQL は,データの更新である. この SQL 文を 「begin transaction」と「commit」で囲む.
- SQL 文の記述
「UPDATE ... SET ...」は更新.ここには 1つの SQL 文を書き, 「begin transaction」と「commit」で囲む.
begin transaction; UPDATE orders SET qty=12 WHERE id = 1001; commit;
- 複数の SQL 文の一括実行
複数の SQL 文を一括実行したいので,カーソルを先頭行に移動した後に,「Run multiple SQL statements ...」のボタンをクリックする.
- 「Script Output」ウインドウの確認
エラーメッセージが出ていないことを確認
- orders テーブル のブラウズ (Browse table 'orders')
SQL を用いた行の削除
SQL を用いた行の削除 (delete row(s))の実行例を示す.
「DELETE FROM <table-name> WHERE <expression>;」の形をした SQL は行の削除である. この SQL 文を 「begin transaction」と「commit」で囲む.
- SQL 文の記述
begin transaction; DELETE FROM orders WHERE id = 1002; commit;
- 複数の SQL 文の一括実行
複数の SQL 文を一括実行したいので,カーソルを先頭行に移動した後に,「Run multiple SQL statements ...」のボタンをクリックする.
- 「Script Output」ウインドウの確認
エラーメッセージが出ていないことを確認
- orders テーブル のブラウズ
SQLiteman を用いたデータのブラウズ
-
まず,オブジェクト・ブラウザ (Object Browser) の中の「Tables」を展開
- 次に,テーブル ordersを選ぶ (Select table 'orders')
- テーブル ordersが表示される (table 'orders' appears)
* もし,データに間違いがあれば,このウインドウで修正できる (If you find any mistakes, you can modify the data using this window).
- 行を削除したいときは,左端の行番号をクリックした後, 「この行を削除」を選ぶ
テーブルの CSV ファイル形式データのインポート (Import table data)
- CSV ファイルを準備しておく
ここで使用する CSV ファイル: 580.csv
-
「Database」
→「Import Table Data ...」と操作する.
- インポート先のテーブル名とファイル名を設定.「Comma」を選び,
下側のプレビュー画面を確認したのち、
「OK」をクリック
日本語を試してみる
テーブルのデータとして日本語を試す(属性名やテーブル名を日本語にするわけではない)
- 「"① ② I Ⅱ ㍉ ㌢ ㈱"」は Shift_JIS にはなく,Shift_JIS を拡張した文字コードセットである Windows-31J にある
- 「"‖ 〜 − ¢ £ ¬ " 」は Shift_JIS, EUC-JP, ISO-2022-JP では同じ文字コードなのに Windows-31J では違う文字コード
- 「表 十 構」は Shift_JIS では 2 バイト目が「5C」になっているもの
- SQL 文の記述
create table JANCHAR ( id integer primary key not null, bunsyou text ); begin transaction; insert into JANCHAR values( 1, 'コンニチハ' ); insert into JANCHAR values( 2, '① ② I Ⅱ ㍉ ㌢ ㈱' ); insert into JANCHAR values( 3, '‖ 〜 − ¢ £ ¬' ); insert into JANCHAR values( 4, '表 十 構' ); insert into JANCHAR values( 5, '〒' ); commit;
- 複数の SQL 文の一括実行 (Execute multiple SQL statements)
複数の SQL 文を一括実行したいので,カーソルを先頭行に移動した後に,「Run multiple SQL statements ...」のボタンをクリックする.
- 「Script Output」ウインドウの確認
エラーメッセージが出ていないことを確認
- JANCHAR テーブル のブラウズ (Browse table 'JANCHAR')