データベース入門 |
![]() |
データの格納とデータのハンドリングを 行うためのツール群をデータベースと呼んでいます. データはテーブルの形式で格納され, データが格納された複数のテーブルの集合を データベースと呼んでいます.
テーブルの「1 行」に何でもデータを入れられるわけではなく, まず始めにどのようなデータを格納するか宣言する必要があります. Fortran と同じように, 「この行には文字列が入る」, 「これ列には整数が入る」 と宣言する必要があります.
今回の座学編では, データベースの簡単な使い方を実演したいと思います.
データベース言語として SQL というものがあります. データベースの内容を いじる時には, SQL のインタプリタである psql を用いるのが一般的です. 以下では簡単な使い方を見ていきます. (既に hogehoge という名前のデータベースが作成されているものとします).
テーブルの作成
$ psql hogehoge; (データベースの起動) hogehoge => CREATE TABLE shinamono (hinmei TEXT, nedan INTEGER);ここで, 大文字で書かれた部分は SQL の構文上のキーワード, 小文字で書かれた部分はユーザ定義の構文上の要素とします. この作業を行うことによって, データベース内には,というテーブルが作成されます.
shinamono hinmei nedan TEXT(文字列) INTEGER(整数) データの登録
テーブルにデータを登録します. データを登録するには INSERET を使います.
hogehoge => INSERT INTO shinamono VALUES ('みかん', '50'); hogehoge => INSERT INTO shinamono VALUES ('リンゴ', '150'); hogehoge => INSERT INTO shinamono VALUES ('梨', '100'); hogehoge => INSERT INTO shinamono VALUES ('メロン', '1000');この操作によって, テーブルにデータが入力されます.という具合にデータが入力されます.
shinamono hinmei nedan みかん 50 リンゴ 150 梨 100 メロン 1000 データの抽出
テーブルを表示させるには,
hogehoge => SELECT * FROM shinamono; (全部一覧される) hogehoge => SELECT hinmei FROM shinamono; (品名の項だけが一覧される)とします. これを応用すると検索エンジンが簡単にできます. 例えば以下の通り.hogehoge => SELECT * FROM shinamono WHERE nedan = 50; (価格が 20 なものを出力) hogehoge => SELECT hinmei FROM shinamono WHERE hinmei ~ 'mi' ; (品名に 'mi' の含まれる項の部分検索) hogehoge => SELECT hinmei FROM shinamono WHERE hinmei LIKE 'mi' ; (品名が 'mi' のものの検索)その他にも並びをソートしたり, 数字を * 倍することも簡単に行えます.SELECT を用いることによって, 簡単な検索ができるようになります. PostgreSQL を用いた検索システムを作る場合には, 内部で SQL 文を作成し, それをデータベースに渡してあげれば良いことになります.
perl, Tcl, Ruby, C, Java 等には PostgreSQL を扱うための インターフェイスが用意されています. これらを使うことで 様々なアプリケーションから PostgreSQL を使うことができるようになります.
今回は Web からデータベースを扱う例を示します. perl で CGI を作る 方法もありますが, 今回は PHP を用いる方法を示します. これは HTML に 埋め込んで使えるスクリプト言語で, CGI と同等の機能を提供します.
まず, テーブルを作成します. これは予め作成しておく必要があります. 以下は「カヌー入山届」の例です.
-- カヌー「入山届け」システム データベース ========================== -- 2001/07/08 杉山耕一朗 ============================================ -- $ psql -e -d canoe -f database.sql -- -- 消去用 SQL 文 ==================================================== drop table main; -- メインテーブル =================================================== create table main ( id int primary key, -- 入山予定日 date_in date, -- 入山予定日 date_out date, -- 下山予定日 river text, -- 川 or 湖 or 海名 name text, -- 代表者氏名 phone text, -- 代表者連絡先 num int, -- 人数 club text, -- 所属カヌークラブ info text -- 備考 ); -- シーケンス作成==================================================== create sequence canoe_id ; -- ユーザ www-data がテーブルの内容を参照できるようにする =========== grant all on main to "www-data"; grant all on canoe_id to "www-data";データの受渡しですが, これはユーザが入力した内容を元に内部で SQL 文を 作成し, データベースに渡しています.
$sql = "INSERT INTO $tablename VALUES( nextval('canoe_id'), '$date_in', '$date_out', '$river', '$name', '$phone_new', $num_new, '$club', '$info' )"; $result = @pg_exec($sql);データ検索も, ユーザが入力した内容を元に内部で SQL 文を 作成し, データベースに渡しています. その戻り値を HTML のテーブルに 変換しています.
日付の選択の場合 $sql = "SELECT * from $tablename WHERE date_in >= '$date' AND date_in <= '$date_max' order by date_in "; $result->doSelect($sql); 名前の選択の場合 $sql = "SELECT * FROM $tablename WHERE name ~ '$name' order by date_in "; $result->doSelect($sql);