Firebird isql によるデータベース作成と SQL 体験(gsec の解説を含む)
このページでは,Firebird(2026年4月時点の最新安定版は Firebird 5.0.4)に付属する 対話型コマンドラインツール isql を使い, データベースの新規作成,テーブル定義,データの挿入・検索・更新・削除(いわゆる CRUD), トランザクションを体験する. あわせて,旧来のユーザ管理コマンド gsec の位置づけ(Firebird 3 以降は非推奨)を説明する.
前準備
- Firebird のインストールが終わっていること: Windows での Firebird のインストール »
- SYSDBA のパスワードが分かっていること: Firebird のパスワード管理 »
- Firebird のサービス「Firebird Server - DefaultInstance」が実行中であること.
以下,Firebird 5.0 の既定のインストール先「C:\Program Files\Firebird\Firebird_5_0」を前提に説明する (Firebird 4.0 の場合は「Firebird_4_0」に読み替える). 毎回フルパスを打つのが面倒な場合は,このディレクトリを Windows の環境変数 PATH に追加しておくとよい.
【体験1】isql の起動と終了
手順
-
コマンドプロンプトを開く
Windows キーを押し「cmd」と入力し,Enter キーを押す.
-
isql を起動する(データベースに接続しない状態で起動できる)
"C:\Program Files\Firebird\Firebird_5_0\isql.exe"
次のように表示される.
Use CONNECT or CREATE DATABASE to specify a database SQL>
-
ヘルプの表示
HELP;
-
終了
QUIT;
※ QUIT; は変更をロールバックして終了,EXIT; は変更をコミットして終了である(この違いは重要).
【体験2】データベースの新規作成
Firebird では,1つのデータベースは1つのファイル(拡張子 .fdb)である. ここでは C:\db\mydb.fdb を作る.
手順
-
データベースファイル置き場のディレクトリを作る(コマンドプロンプトで)
mkdir C:\db
-
isql を起動する
"C:\Program Files\Firebird\Firebird_5_0\isql.exe"
-
データベースを新規作成する
CREATE DATABASE 'localhost:C:\db\mydb.fdb' USER 'SYSDBA' PASSWORD '<SYSDBAのパスワード>' PAGE_SIZE 8192 DEFAULT CHARACTER SET UTF8;
※ 文字コードは UTF8 を指定する(日本語を扱うため).
※ PAGE_SIZE 8192 は既定値であり省略してもよい(Firebird 5 では最大 32768 まで指定できる).
-
接続状態の確認
SHOW DATABASE;
Database,Owner,Page size,Default character set などが表示される.
-
いったん終了する
EXIT;
-
既存のデータベースに接続し直す
"C:\Program Files\Firebird\Firebird_5_0\isql.exe" -user SYSDBA -password <SYSDBAのパスワード> localhost:C:\db\mydb.fdb
isql の中から接続するときは次のようにする.
CONNECT 'localhost:C:\db\mydb.fdb' USER 'SYSDBA' PASSWORD '<SYSDBAのパスワード>';
- 「localhost:」を付けるとサーバ経由の接続,付けない(ファイルパスだけの)場合は組み込み(embedded)での直接アクセスになる.学習ではサーバ経由(localhost: 付き)を推奨する.
- 「I/O error ... file ... is not opened」等のエラーは,ディレクトリが存在しない,または書き込み権限がないことが原因のことが多い.
- よく使うデータベースには,databases.conf にエイリアス名(例:mydb = C:\db\mydb.fdb)を登録しておくと「localhost:mydb」で接続できて便利である.
【体験3】テーブル定義とデータの挿入・検索・更新・削除
商品テーブル shohin を例に,SQL の基本操作を一通り体験する. mydb.fdb に接続した状態(SQL> プロンプト)で行う.
手順
-
テーブル定義(CREATE TABLE)
CREATE TABLE shohin ( id INTEGER GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY, name VARCHAR(40) NOT NULL, price DECIMAL(10, 0) NOT NULL, stock INTEGER DEFAULT 0 NOT NULL, created TIMESTAMP DEFAULT CURRENT_TIMESTAMP ); COMMIT;
※ IDENTITY 列(自動採番)は Firebird 3 以降で使える標準 SQL の機能である.
-
テーブルの確認
SHOW TABLES; SHOW TABLE shohin;
-
データの挿入(INSERT)
INSERT INTO shohin (name, price, stock) VALUES ('りんご', 120, 50); INSERT INTO shohin (name, price, stock) VALUES ('みかん', 80, 100); INSERT INTO shohin (name, price, stock) VALUES ('メロン', 1500, 5); COMMIT; -
検索(SELECT)
SELECT * FROM shohin; SELECT name, price FROM shohin WHERE price >= 100 ORDER BY price DESC; SELECT COUNT(*), AVG(price) FROM shohin;
先頭の数件だけ表示したいときは,Firebird 独自の FIRST か,標準 SQL の FETCH を使う.
SELECT FIRST 2 * FROM shohin ORDER BY price DESC; SELECT * FROM shohin ORDER BY price DESC FETCH FIRST 2 ROWS ONLY;
-
更新(UPDATE)
UPDATE shohin SET price = 130 WHERE name = 'りんご'; COMMIT; SELECT * FROM shohin;
-
削除(DELETE)
DELETE FROM shohin WHERE name = 'みかん'; COMMIT; SELECT * FROM shohin;
- 日本語が文字化けするときは,データベース作成時の DEFAULT CHARACTER SET UTF8 の指定と,コマンドプロンプトの文字コード(「chcp 65001」で UTF-8 に変更できる)を確認すること.
- WHERE 句を付け忘れた UPDATE や DELETE は全行に作用する.COMMIT する前なら,次の【体験4】の ROLLBACK で取り消せる.
【体験4】トランザクション(COMMIT と ROLLBACK)
Firebird は多版型同時実行制御(MVCC)を採用したトランザクション処理システムである. isql では,データを変更する SQL 文は自動的にトランザクションの中で実行され, COMMIT するまで確定しない.
手順
-
わざと全行削除してみる(COMMIT はしない)
DELETE FROM shohin; SELECT COUNT(*) FROM shohin;
件数が 0 になったことを確認する.
-
取り消す(ROLLBACK)
ROLLBACK; SELECT COUNT(*) FROM shohin;
件数が元に戻ったことを確認する.
- ROLLBACK でデータが元に戻るのはなぜか.データベース管理システムが「変更前の版」をどう保持しているか(MVCC)を調べてみること.
- isql を2つ起動して同じデータベースに接続し,一方で INSERT(未 COMMIT)した行が他方から見えるかどうかを実験してみること(トランザクション分離).
【体験5】SQL スクリプトファイルの実行と結果の保存
手順
-
メモ帳などで,次の内容のファイル C:\db\test.sql を作る(文字コードは UTF-8 で保存)
CONNECT 'localhost:C:\db\mydb.fdb' USER 'SYSDBA' PASSWORD '<SYSDBAのパスワード>'; SELECT * FROM shohin; EXIT;
-
コマンドプロンプトから一括実行する
"C:\Program Files\Firebird\Firebird_5_0\isql.exe" -i C:\db\test.sql
-
結果をファイルに保存したいときは -o を付ける
"C:\Program Files\Firebird\Firebird_5_0\isql.exe" -i C:\db\test.sql -o C:\db\result.txt
【解説】gsec について(Firebird 3 以降は非推奨)
gsec は,Firebird 2.5 以前で使われていたユーザ管理(ユーザの追加・削除・パスワード変更)の専用コマンドである. Firebird 3 以降では非推奨(deprecated)であり, 既定の認証方式 Srp(Secure Remote Password)で作られたユーザは gsec では正しく扱えない場合がある. 現在は,isql から SQL 文でユーザ管理を行うのが標準である.
- ユーザ一覧:
SELECT SEC$USER_NAME FROM SEC$USERS; - ユーザ追加:
CREATE USER user1 PASSWORD '<パスワード>'; - パスワード変更:
ALTER USER user1 SET PASSWORD '<新パスワード>'; - ユーザ削除:
DROP USER user1;
詳しい手順と体験は, Firebird のパスワード管理のページ » にまとめている.
【参考】isql と一緒によく使う付属コマンド
- gbak:バックアップと復元.
gbak -b -user SYSDBA -password <パスワード> localhost:C:\db\mydb.fdb C:\db\mydb.fbk gbak -c -user SYSDBA -password <パスワード> C:\db\mydb.fbk localhost:C:\db\mydb2.fdb
- gstat:データベースの統計情報の表示.
- gfix:データベースの検証・修復・各種設定の変更.
考察ポイント(まとめ)
- Firebird の「1データベース = 1ファイル」という設計は,バックアップや配布の面でどのような利点・欠点があるか.SQLite 3 と比較してみること.
- COMMIT を明示的に行う方式(isql の既定)と,自動 COMMIT 方式(多くの GUI ツールの既定)のそれぞれの利点・危険性は何か.
- IDENTITY 列(自動採番)と,旧来のジェネレータ(シーケンス)+ トリガによる採番との違いを調べてみること.