sql テーブルの作成
2011/03/28
基本は下記のような感じ。「[]」の中を適当にする。
- CREATE TABLE [テーブル名] (
- [ラベル名1] [データ型],
- [ラベル名2] [データ型]
- )
- WITHOUT OIDS;
[テーブル名][ラベル名]とかは適当。[データ型]は必要に応じて変更。
参考:「PostgreSQL データ型のまとめ」
※「WITHOUT OIDS」は「オブジェクト識別子の割り当て」というものをしてくれるらしいが、とりあえず気にしない。
パラメータによるルール
それぞれに微妙なルールをつけることも可能。
- CREATE TABLE [テーブル名] (
- [ラベル名1] [データ型] NOT NULL,
- [ラベル名2] [データ型] DEFAULT (-1),
- [ラベル名3] [データ型] DEFAULT 1,
- [ラベル名4] [データ型] NOT NULL DEFAULT 1
- )
- WITHOUT OIDS;
2行目の「NOT NULL」は[ラベル名1]の値に「NULL」は禁止。
3行目の「DEFAULT (-1)」は[ラベル名2]の値の初期値は「-1」。
4行目の「DEFAULT 1」は[ラベル名3]の値の初期値は「1」。
5行目の「NOT NULL DEFAULT 1」は[ラベル名4]の値に「NULL」は禁止で初期値は「1」。
CONSTRAINTによるルール
- CREATE TABLE [テーブル名] (
- [ラベル名1] [データ型] NOT NULL,
- [ラベル名2] [データ型] DEFAULT (-1),
- CONSTRAINT [ルール名] [ルール] ([ラベル名])
- )
- WITHOUT OIDS;
4行目は[ルール名]は「[ラベル名]に対して[ルール]を適用する」という意味。
CONSTRAINT id_cnst UNIQUE (id)
上記の場合だと
「ルール名:id_cnst」
「ルール:idはUNIQUE」
である。
自動記載(?)
自動で連番生成
「シーケンス」というものを使う。
※シーケンスとは「連番を発行する仕組み]のこと。
[ラベル名]に連番を自動記入する場合。
[CREAT TABLE]とは別に[CREATE SEQUENCE]というものを使う。
CREATE SEQUENCE [シーケンス名] START 1;
次に[CREAT TABLE]で下記を記述。
- CREATE TABLE [テーブル名] (
- [ラベル名1] [データ型] DEFAULT nextval(‘[シーケンス名]’::regclass),
- [ラベル名2] [データ型]
- )
- WITHOUT OIDS;
「::regclass」は「[シーケンス名]は「regclass」という型ですよ」という意味らしい。とりあえず深くは考えない。
また、シーケンスを使わずに下記のように[SERIAL]というものを使ってもOK。
- CREATE TABLE [テーブル名] (
- [ラベル名1] SERIAL,
- [ラベル名2] [データ型]
- )
- WITHOUT OIDS;
ちなみに作成したシーケンスを削除。
DROP SEQUENCE [シーケンス名];
自動で日時生成
「writedate」というものを使う。
- CREATE TABLE [テーブル名] (
- [ラベル名1] SERIAL,
- writedate [ラベル名2] NOT NULL DEFAULT CURRENT_TIMESTAMP
- )
- WITHOUT OIDS;