firebirdというオープンソースのデータベースを使ってみた【その4】

連載も4回目、MyISAMが嫌いなk2w4t4hです。

第1回目 firebirdというオープンソースのデータベースを使ってみた【その1】 - スマートフォンアプリ開発会社のエンジニアブログ
第2回目 firebirdというオープンソースのデータベースを使ってみた【その2】 - スマートフォンアプリ開発会社のエンジニアブログ
第3回目 firebirdというオープンソースのデータベースを使ってみた【その3】 - スマートフォンアプリ開発会社のエンジニアブログ

さて、前回テーブルを作ったので、今回はselect、insert、update、deleteの書き方を書いていこうかなと思います。基本的にはMySQLとの違いを書いていく方針で。

前回以下のように作成したテーブルをベースに書いていきます。

CREATE TABLE GLPGS(
ID INTEGER NOT NULL PRIMARY KEY,
NAME VARCHAR(63) NOT NULL,
PASSWD VARCHAR(127) NOT NULL,
LEVEL SMALLINT NOT NULL,
UPDATED TIMESTAMP NOT NULL,
CREATED TIMESTAMP NOT NULL
);

CREATE SEQUENCE GLPGS_SEQ;

まずはselectについて

SELECT ID,NAME FROM GLPGS WHERE LEVEL =10 ORDER BY LEVEL DESC ROWS 10 TO 20;

これだとLEVELが10の中で、11件目から20件目まで取得します。このような書き方はMySQLとは少し違います。MySQLでは「LIMIT 10,10」という風に書くと、11件目から20件目まで取得できます。他、MySQLでは割と適当な位置にDESCと書いてもよかったりしますが、firebirdではきっちりとORDER区のところに書かないとアウトです。


さて、insert。前回ちらりと

INSERT INTO glpgs (id,name,passwd,level,updated,created) VALUES (next value for glpgs_seq, 'root', 'passwd', 10, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP);

と書きました。今回は少しこれを変更しまして、

INSERT INTO glpgs (id,name,passwd,level,updated,created) VALUES (next value for glpgs_seq, 'root', 'passwd', 10, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP) RETURNING ID;

としておきます。すると、insertに成功した場合、そのinsertに成功したデータのIDが返ってきます。Postgresと同じ仕組みです。mysqlだとlast_insert_id()という関数がありますけどねー、firebirdにはそんなものないんで。当然MySQLならあるPHPの便利関数「mysql_insert_id」みたいなのもありません。


次はupdateについて

UPDATE GLPGS SET NAME = 'glpgs', PASSWD = 'passwd', LEVEL = '1' WHERE ID = 1;

など。updateはSETで書いて、insertはVALUESで書かないといけないのかな。firebirdは日本語のドキュメントが少ないorz まあ間違っててもこれもドキュメントになっていくからいいだろうといういい加減な気持ちで書いていきます(おい)。


最後に、delete。これだけは何の特徴もありません。

DELETE FROM GLPGS WHERE ID = 1;

次回はALTER TABLEについて書きます。