Database OracleDB インフラ

[OracleDB] テーブル作成のSQL「create table」文とポイントを紹介

2018年6月6日

こんにちは!シミダイ(@shimidai2100)です。

Oracle Databaseのテーブル作成SQLと作成時のポイントを紹介します。

単純なテーブル作成SQLは各種メディアやブログで紹介されており、指定できるパラメータも多くあります。

この記事では初心者向けにテーブルを作成する時の重要なポイントも合わせて紹介します。

何も考えなくてテーブルは作成できますがこの記事を読んで最適にテーブルを作成を実施してください。

この記事の内容

  • テーブルの作成SQLの基本構文を紹介
  • プライマリーキー、ユニークキー、外部キーの指定方法
  • NOT NULL制約・DEFAULT制約・表領域の指定方法

テーブルの作成SQL:create table

まずはテーブル作成のSQL「create table」を紹介したいと思います。

create table文は、テーブルを作成するコマンドになります。

テーブル後に変更ができないパラメータが多く存在するため作成SQLを間違えないようにしましょう。

create table <スキーマ名>.<テーブル名>(
  <列名> <データ型>,
  <列名> <データ型>,
  <列名> <データ型>
);

下がサンプルSQLになります。

テーブル名を指定指定する時は、「スキーマ名.テーブル名」の形で作成しましょう。

列名の指定カンマ区切りで行います。

create table TEST001.TAB001 (
  COL01  varchar2(10),
  COL02  number,
  COL03  date
);

データ型の種類と指定方法

OracleDatabaseでは文字列・数値・文字列・バイナリデータのデータ型をよく使用します。

下に最も利用するデータ型の一覧を作成しましたの参考にしてください。

[table id=32 /]

プライマリーキー(主キー)を指定:constraint ~ primary key

テーブルを作成時に合わせてプライマリーキーを作成するには「constraint ~ primary key」を指定します。

列名を指定した後に「constraint 」句をしますが、カンマを忘れないようにしましょう。

create table <スキーマ名>.<テーブル名>(
  <列名> <データ型>,
  <列名> <データ型>,
  <列名> <データ型>,
  constraint <主キー名> primary key(<主キー列名>)
);

下がサンプルSQLになります。

create table TEST001.TAB001 (
  COL01  varchar2(10),
  COL02  number,
  COL03  date,
  constraint TAB001_PK primary key(COL01)
);

また主キーとする列を複数指定する「複合プライマリーキー」の例は↓になります。

create table TEST001.TAB001 (
  COL01  varchar2(10),
  COL02  number,
  COL03  date,
  constraint TAB001_PK primary key(COL01,COL02)
);

私個人的にはテーブルとプライマリーキーやインデックスは別で作成することが多いです。

テーブルとインデックスを分けておくとDDLの管理が分かりやすくなるからです。

ユニークキー(一意制約)を指定:constraint ~ unique 

テーブルを作成時に合わせてユニークキーを作成するには「constraint ~ unique ()」を指定します。

列名を指定した後に「constraint 」句をしますが、カンマを忘れないようにしましょう。

create table <スキーマ名>.<テーブル名>(
  <列名> <データ型>,
  <列名> <データ型>,
  <列名> <データ型>,
  constraint <ユニークキー名> primary (<ユニークキー列名>)
);

下がサンプルSQLになります。

create table TEST001.TAB001 (
  COL01  varchar2(10),
  COL02  number,
  COL03  date,
  constraint TAB001_UK unique (COL02)
);

外部キー(参照整合性)を付与:constraint ~ foreign key references ~

テーブルを作成時に合わせて外部キーを作成するには「constraint ~ foreign key () references ~()」を指定します。

列名を指定した後に「constraint 」句をしますが、カンマを忘れないようにしましょう。

create table <スキーマ名>.<テーブル名>(
  <列名> <データ型>,
  <列名> <データ型>,
  <列名> <データ型>,
  constraint <外部キー名> foreign key (列名) references <外部参照テーブル>(列名)
);

下がサンプルSQLになります。

create table TEST001.TAB001PARENT (
  COL01  varchar2(10),
  COL02  number,
  COL03  date,
  constraint TAB001PARENT_PK primary key(COL01)
);

create table TEST001.TAB001 (
  COL01  varchar2(10),
  COL02  number,
  COL03  date,
  constraint TAB001_FK foreign key (COL01) references TEST001.TAB001PARENT(COL01)
);

NOT NULL制約を付与:NOT NULL

テーブルを作成時に合わせてNOT NULL制約を付与する場合には、対象列に「NOT NULL」句を付与します。

create table <スキーマ名>.<テーブル名>(
  <列名> <データ型> not null
);

下がサンプルSQLになります。

create table TEST001.TAB001 (
  COL01  varchar2(10) not null,
  COL02  number,
  COL03  date
);

デフォルト値を指定:DEFAULT

テーブルを作成時に合わせてデフォルト値を指定する場合には、対象列に「DEFAULT」句+「デフォルト値」を付与します。

create table <スキーマ名>.<テーブル名>(
  <列名> <データ型> 
);

下がサンプルSQLになります。

create table TEST001.TAB001 (
  COL01  varchar2(10) default '000000000',
  COL02  number dafault 0,
  COL03  date default sysdate
);

デフォルト表領域を指定:TABLESPACE

テーブルを作成時に合わせてデフォルト表領域を指定する場合には、「TABLESPACE」句を付与します。

このパラメータはテーブル作成時に最も重要なパラメータの1つです。

記憶域のパラメータはカッコ内()ではなく、カッコ外に書く点に注意してください。

create table <スキーマ名>.<テーブル名>(
  <列名> <データ型> 
)
tablespace <表領域名>

下がサンプルSQLになります。

create table TEST001.TAB001 (
  COL01  varchar2(10),
  COL02  number,
  COL03  date
) 
tablespace TESTTBS;

 

参考:しばちょう先生の試して納得!DBAへの道 第2回 表と表領域の関係

関連記事

-Database, OracleDB, インフラ

Copyright© shimidai2100 , 2020 All Rights Reserved.