SQL 入門(テーブル定義)
テーブルの定義は、CREATE TABLE という DDL (Data Definition Language) にて行う。
DDL とは スキーマ を作成、変更、削除するときに使用する SQL の総称
テーブル定義
- 利用者マスタの作成
以下のようなレイアウトの表(USER_MASTER)を作成したい場合
| 日本語名 | カラム名 | 入力必須 | データの型と大きさ | 省略時 |
| 利用者ID | USER_ID | YES | ・8 バイト以内の文字列 | |
| 部門 | DEPT_NO | NO | ・8 バイト以内の文字列 | |
| 利用者名 | USER_NAME | NO | ・32 バイト以内の文字列 | |
| 作成日 | CREATED_ON | NO | ・日付(日+時間) | SYSDATE |
| 更新日 | MODIFIED_ON | NO | ・日付(日+時間) | |
SQLPlus にて、以下の DDL 文を実行する。
CREATE TABLE USER_MASTER
(
USER_ID VARCHAR2(8) NOT NULL,
DEPT_NO VARCHAR2(8),
USER_NAME VARCHAR2(32),
CREATED_ON DATE DEFAULT SYSDATE,
MODIFIED_ON DATE
);
- VARCHAR2(桁数)、DATE
- あらかじめ組み込まれている データ型 の一種で VARCHAR2 は可変長文字列 ( ) 内はその精度を指定する。DATE は日付 + 時刻の型。
- NOT NULL
- NULL (値のない状態を示す単語)を許可しないことを意味する。
- DEFAULT デフォルト値
- 行を作成したときに値が指定されてない場合に、その初期値を設定する(SYSDATEは関数の一つで現在日付をあらわす)。
カラムのデフォルト値は一度設定すると削除できない。削除するかわりにデフォルト値を NULL にするかテーブルを作り直す。(個人的には気持ち悪いから作り直します)
この文で作成したテーブルは現在ログオンしているスキーマ(空間)上に作成され、自分がテーブルの所有者になる。このスキーマの概念があるため、ログオンユーザーが異なれば、同じテーブル名をつけることが可能。
- ☆ガイドライン テーブル名
- テーブルの名前は日本語は避ける。
今のままだと、同じユーザーのデータを 2 回登録できてしまい無駄な上メンテナンス性において都合が悪くなる。
課題
同じユーザーを 2 回登録させるのを防止したい
⇒ USER_IDで二重登録できないように自動的に制御してもらいたい。
実現方法
利用者ID(USER_ID)に対してプライマリキー(PRIMARY KEY)を作成する。
その名前は USER_MASTER_PK にする。
名無しでも作成できるのですが、できるだけ名前は自分で付けるようにしてください。
- ☆ガイドライン: プライマリキー
- プライマリキーの名前は、テーブル名+'_PK' などで統一すると良い。
SQL*Plus にて、以下の DDL 文を実行する。
プライマリキーを作成するDDL文
ALTER TABLE USER_MASTER ADD CONSTRAINT USER_MASTER_PK PRIMARY KEY (USER_ID) ;
NOTE:PRIMARY KEYは (COL1, COL2, ・・・,COL32) 形式で 最大32個によるの 複合主キー を作成可能 (Oracle 10g 時点)
プライマリキーを削除する
プライマリキーを削除するDDL文(制約を汎用的に削除する)
ALTER TABLE USER_MASTER DROP CONSTRAINT USER_MASTER_PK ;
プライマリキーの制約名を指定していない場合には削除するための名前がわからないので
ALTER TABLE USER_MASTER DROP PRIMARY KEY ;
というプライマリキー専用の構文も用意されている。
テーブルの定義を一緒にプライマリキーの定義をする方法もあるが、制限もあるので統一して別々に定義することをお勧めする。
関連事項