Firebird の SQL文(おぼえがき)
2008/12/6 更新
なんだか、いつも忘れちゃうので、最低限使うものの例を書いておくことにします。Firebird 全般に対するメモは Firebird関連のページに置いておきます。
もっとよいドキュメントは、Firebird
SQL リファレンスにあります。
RDBを移行した時のメモも参考になるかもしれません。
ストアードプロシージャについては書いてませんので、 Introduction
to InterBase Stored Procedures and Triggers
辺りをあたってください。
例示してある SQL文は、一応ストーリー立ててあるので、直前の SQL文も見ると判り易いかもしれません。
テーブル作成
CREATE TABLE foo (
a INTEGER NOT NULL,
b VARCHAR(30) NOT NULL UNIQUE,
c VARCHAR(1024) NOT NULL,
d DECIMAL(16,2),
e DATE,
f TIMESTAMP,
g BLOB SUB_TYPE 0, -- 0:binary 1:text
PRIMARY KEY (a),
CONSTRAINT CHECK_A CHECK (a <> 0)
);
CREATE TABLE bar (
i INTEGER NOT NULL,
j VARCHAR(30) NOT NULL,
k VARCHAR(1024),
FOREIGN KEY (j) REFERENCES foo(b) ON UPDATE CASCADE
);
|
Generator の作成と初期値の設定
CREATE GENERATOR gen_foo;
SET GENERATOR gen_foo to 1000;
|
なお、Firebird 2.0
以降は SEQUENCE を使うほうがよいでしょう。
トリガーの作成
主キーに Generatorでとってきた値を自動的に入れる。
set term !! ;
create trigger set_foo_primary for foo
before insert
as begin
new.a = gen_id(gen_foo,1);
end
!!
set term ; !!
|
set term は、trigger の定義内で ";"を使っているため、別の文字を行末記号に使いたいだけ
トリガーの削除
isql コマンドで
SQL>show table foo;
を実行すると、foo に設定してあるトリガーがわかるので
DROP TRIGGER set_foo_primary;
|
Generator の削除
isql コマンドで
SQL>show generator;
を実行すると、定義してある Generator がわかるので
テーブルに制約を付加
ALTER TABLE bar ADD PRIMARY KEY(i, j);
|
フィールドの追加
ALTER TABLE bar ADD m TIME;
|
制約(主キー、外部キー、ユニークキー)の削除
isql コマンドで
SQL>show table foo;
を実行するとテーブル foo の制約名が(INTEG_24とか)わかるので
ALTER TABLE foo DROP CONSTRAINT INTEG_24;
|
外部キー制約に ON DELETE CASCADE を加えたくなった
isql コマンドで
SQL>show table bar;
を実行するとテーブル bar の外部キーの制約名が(INTEG_25とか)わかるのでALTER TABLE で、制約の削除→追加をする。
ALTER TABLE bar DROP CONSTRAINT INTEG_25;
ALTER TABLE bar ADD FOREIGN KEY (j) REFERENCES foo(b) ON UPDATE CASCADE ON DELETE CASCADE;
|
VARCHAR の最大文字列長を大きくする
ALTER TABLE foo ALTER COLUMN c TYPE VARCHAR(4096);
|
カラムの位置の変更
ALTER TABLE bar ALTER m POSITION 2;
|
カラム名称の変更
ALTER TABLE bar ALTER COLUMN m TO new_name;
|
インデックス追加
CREATE INDEX foo_d_index on foo(d);
|
インデックスの削除
isql コマンドで
SQL>show index foo;
を実行すると、foo に付加されているインデックスの名前がわかるので
制約をつけた時にシステムが自動的につけるインデックスは RDB$xxxx となっている
データ追加
INSERT INTO foo (b, c) values ('something', 'stringdata');
INSERT INTO foo (b, c) select s, t FROM some_what_table WHERE u = 'some what';
|
データ更新
UPDATE foo SET b='B', c='C' WHERE a=1000;
|
データ削除
DELETE FROM foo WHERE a=1000;
|
TRUNCATE TABLEは無いので、テーブルの中身を空にする場合も DELETE文を使う
テーブル削除
最初の 10行を取得
SELECT FIRST 10 * FROM foo;
|
その他
Zope メモ