sql テーブルの作成

2011/03/28

基本は下記のような感じ。「[]」の中を適当にする。

  1. CREATE TABLE [テーブル名] (
  2. [ラベル名1] [データ型],
  3. [ラベル名2] [データ型]
  4. )
  5. WITHOUT OIDS;

[テーブル名][ラベル名]とかは適当。[データ型]は必要に応じて変更。
参考:「PostgreSQL データ型のまとめ」
※「WITHOUT OIDS」は「オブジェクト識別子の割り当て」というものをしてくれるらしいが、とりあえず気にしない。

パラメータによるルール

それぞれに微妙なルールをつけることも可能。

  1. CREATE TABLE [テーブル名] (
  2. [ラベル名1] [データ型] NOT NULL,
  3. [ラベル名2] [データ型] DEFAULT (-1),
  4. [ラベル名3] [データ型] DEFAULT 1,
  5. [ラベル名4] [データ型] NOT NULL DEFAULT 1
  6. )
  7. 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によるルール

  1. CREATE TABLE [テーブル名] (
  2. [ラベル名1] [データ型] NOT NULL,
  3. [ラベル名2] [データ型] DEFAULT (-1),
  4. CONSTRAINT [ルール名] [ルール] ([ラベル名])
  5. )
  6. WITHOUT OIDS;

4行目は[ルール名]は「[ラベル名]に対して[ルール]を適用する」という意味。

CONSTRAINT id_cnst UNIQUE (id)

上記の場合だと
「ルール名:id_cnst」
「ルール:idはUNIQUE」
である。

自動記載(?)

自動で連番生成

「シーケンス」というものを使う。
※シーケンスとは「連番を発行する仕組み]のこと。

[ラベル名]に連番を自動記入する場合。
[CREAT TABLE]とは別に[CREATE SEQUENCE]というものを使う。

CREATE SEQUENCE [シーケンス名] START 1;

次に[CREAT TABLE]で下記を記述。

  1. CREATE TABLE [テーブル名] (
  2. [ラベル名1] [データ型] DEFAULT nextval(‘[シーケンス名]’::regclass),
  3. [ラベル名2] [データ型]
  4. )
  5. WITHOUT OIDS;

「::regclass」は「[シーケンス名]は「regclass」という型ですよ」という意味らしい。とりあえず深くは考えない。
また、シーケンスを使わずに下記のように[SERIAL]というものを使ってもOK。

  1. CREATE TABLE [テーブル名] (
  2. [ラベル名1] SERIAL,
  3. [ラベル名2] [データ型]
  4. )
  5. WITHOUT OIDS;

ちなみに作成したシーケンスを削除。

DROP SEQUENCE [シーケンス名];

自動で日時生成

「writedate」というものを使う。

  1. CREATE TABLE [テーブル名] (
  2. [ラベル名1] SERIAL,
  3. writedate [ラベル名2] NOT NULL DEFAULT CURRENT_TIMESTAMP
  4. )
  5. WITHOUT OIDS;

新着(ニュース関連以外)

2018-07-26
年賀状で「新春」とか書くけど・・・何故なんだろうと8月を目前にした今、疑問に思った。
2018-05-16
PHPで画像のヘッダ情報(?)の「Orientation」を元に画像回転させたい。
2018-03-05
Android Studioをインストール。エミュレータを軽くするトコまで終わらせたかったけど、挫折した。
2018-02-23
プッシュ通知について調べてた時にでてきたServiceWorker。そのServiceWorkerについてのメモ。
2017-12-13
jqueryで取得したDOM要素をオブジェクトじゃなくて、配列で受け取りたい