オープンソースで作る Java+DB

特集 オープンソースで作るJava+DB
第1回 PostgreSQLで学ぶSQLデータベースの操作 (7/15)


One Point!

便宜上、適当な場所で改行しているが、改行しなくてもよいし、改行する場所は任意である。以降に示す構文も同様だ。テーブルを作成するCREATE TABLE文は、次の書式になる。

CREATE TABLE テーブル名 (
列名 型
);

One Point!

もし列が主キーであるならば、その列には「PRIMARY KEY」と記述する。またNULL値を許容したくない場合には、「NOT NULL」を指定する。

PRIMARY KEYは、NOT NULLを兼ねる。よって、PRIMARY KEYと記述した列には、NOT NULLを記述してはならない。

 また、レコードが追加された際、その列に明示的に値が与えられなかった場合の標準値を指定したい場合には、DEFAULTの指定をする。この例では、まず、id列に対して、次の標準値を指定している。

id INTEGER PRIMARY KEY DEFAULT nextval('KeijiID')

 「nextval」は、PostgreSQLの関数で、シーケンスから次の値を取得するという意味だ。すでにKeijiIDシーケンスは、1、2、…のような連番を返すように構成してある。よって、id列には、レコードが追加されるときに、自動的に、1、2、…という連番が格納されていくようになる。

 もうひとつDEFAULT指定をしているのは、writedate列だ。

writedate TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP

 CURRENT_TIMESTAMPは、現在の日時を返すPostgreSQLの関数だ。これによってwritedate列には、レコードを追加したときの日時が自動的に設定されるようになる。CREATE TABLE文の意味が分かったところで、実際にpsqlコマンド上で入力し、Keijiテーブルを作成しよう。

 このCREATE TABLE文は、複数行に分割されているので、psqlコマンド上での入力は、次のようになる。

sampledb=# CREATE TABLE Keiji (
sampledb(# id INTEGER PRIMARY KEY DEFAULT nextval('KeijiID'),
sampledb(# name VARCHAR(255) NOT NULL,
sampledb(# email VARCHAR(255),
sampledb(# title VARCHAR(255) NOT NULL,
sampledb(# body VARCHAR(2048) NOT NULL,
sampledb(# writedate TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
sampledb(# host VARCHAR(255)
sampledb(# );

 psqlコマンドは、「;」をSQL文の終わりと解釈するので、実際には、上記のようでなく、任意の場所で区切って良い。CREATE TABLE文を実行すると、次のように表示され、Keijiテーブルが作成される。

NOTICE: CREATE TABLE / PRIMARY KEY will create implicit index 'keji_pkey' for table 'keji'
CREATE TABLE

 テーブルを削除する場合には、DROP TABLE文を使う。DROP TABLE文を使うと、テーブルに含まれているレコードも含め、すべて削除されるので注意が必要だ。また、ALTER TABLE文を使うと、既存のテーブルの構造を変更することもできる。ただしPostgreSQLの場合、ALTER TABLE文でできるテーブル構造の変更には、幾つかの制限がある。

 基本的にテーブルはいちど定義したら、あとからむやみに変更しないことが望ましい。変更をすると、その変更内容によっては、既存のレコードの整合性に問題が生じることがあるためだ。つまりデータベースを利用する場合には、事前にテーブルの入念な設計が不可欠である。

 実際に作られたかどうかは、次のように\dコマンド指定で確認可能だ。

sampledb=# \d List of relations Schema | Name | Type | Owner --------+---------+----------+---------- public | keiji | table | postgres public | keijiid | sequence | postgres (2 rows)

 また、次のように「SELECT \d テーブル名;」と入力すると、そのテーブルの構造を見ることもできる。

sampledb-# SELECT \d Keiji; Table "public.keiji" Column | Type | Modifiers -----------+-----------------------------+-------------------------------------- ----------------------- id | integer | not null default nextval('KeijiID'::t ext) name | character varying(255) | not null email | character varying(255) | title | character varying(255) | not null body | character varying(2048) | not null writedate | timestamp without time zone | not null default ('now'::text)::times tamp(6) with time zone host | character varying(255) | Indexes: keiji_pkey primary key btree (id)

前のページ | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | 次のページ

[大澤文孝,ITmedia]