テーブルの作成(CREATE TABLE)

今回からはpsqlを利用して実際にSQLコマンドを発行していきます。

まずは、データの入れ物であるテーブルを作成します。

CREATE TABLEコマンド

テーブルの作成はCREATE TABLEコマンドで行います。

CREATE TABLEコマンドの基本構文
CREATE TABLE テーブル名 (列名 データ型 制約 [, 列名 データ型 制約 …] );

※[]内の数は不定

()内は列名とデータ型、その列の制約で1セットとなり、定義する列の分だけ、カンマ(,)区切りで指定します。列名とデータ型の定義は必須であり、制約は必要に応じて任意に設定します。

ここではサンプルとして以下の列を持つStaffテーブルを作成します。

列名 データ型 制約
id INTEGER PRIMARY KEY
name TEXT NOT NULL
age INTEGER なし

スタッフの名簿情報を格納するテーブルです。列には「id」「name」「age」を持ち、それぞれ、ID、名前、年齢を格納します。データ型はそれぞれ数字、文字列、数字とします。

また、各列の制約として、「id」にはPRIMARY KEY(主キー)制約を持たせます。PRIMARY KEY制約は、列内で重複する値の格納を許可せず、かつ、必ずデータを格納しなければならないという制約です。

「name」には必ずデータを格納しなければならないことを示すNOT NULL制約を持たせます。

では、実際にCREATE TABLEコマンドを発行してテーブルを作成してみましょう。今回発行するSQL文は以下になります。

CREATE TABLE Staff
(id    CHAR(4)    NOT NULL,
name   TEXT       NOT NULL,
age    INTEGER    ,
PRIMARY KEY (id));

まず、PostgreSQLに接続します。本サンプルでは接続先のデータベースとして「testdb」を指定しています。データベースの作成については「サンプルデータベースの作成」を参照してください。

# su - postgres
$ psql -U postgres testdb

「testdb」に接続できたら、上記のCREATE TABLEコマンドを発行し、Staffテーブルを作成します。SQL文は1行で実行しても構いませんが、見やすいよう以下のように複数行に分けて実行します。

testdb=# CREATE TABLE Staff
testdb-# (id    CHAR(4)    NOT NULL,
testdb(# name   TEXT       NOT NULL,
testdb(# age    INTEGER    ,
testdb(# PRIMARY KEY (id));

2行目以降は、プロンプトが「=#」から「-#」や「(#」に変わっていることに着目してください。これは、まだSQLが終わっていないことを示しており、セミコロンを入力し、Enterキーを押すことで、ここまでの入力した内容がひとつのSQL文として見なされ実行されます。

では、テーブルが作成されたかどうかをバックスラッシュコマンドで確認してみましょう。

testdb=# \d
              リレーションの一覧
 スキーマ |    名前     |    型    |  所有者
----------+-------------+----------+----------
 public   | staff       | テーブル | postgres
 public   | testTable01 | テーブル | postgres
(2 行)

Staffテーブルが一覧から確認できます。これでテーブルは作成されました。次回は今回作成したテーブルにデータを挿入するSQLについて見ていきます。