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では文字列・数値・文字列・バイナリデータのデータ型をよく使用します。
下に最も利用するデータ型の一覧を作成しましたの参考にしてください。
データ型名 | データ型の説明 | サイズ範囲 |
---|---|---|
VARCHAR2 | 可変長の文字列 | 最大4000Byte |
NVARCHAR2 | 可変長の各国語文字列 | 最大4000Byte |
CHAR | 固定長の文字列 | 最大2000Byte |
NCHAR | 固定長の各国語文字列 | 最大2000Byte |
CLOB | 4KBを超える文字列 | 最大2^32-1Byte |
NCLOB | 4KBを超える各国語文字列 | 最大2^32-1Byte |
NUMBER | 固定小数点数値型 | 精度p(1〜38桁)、位取りs(-84〜127桁:省略時は0) |
BINARY_FLOAT | 32Bit浮動小数点数値型 | 1.17549E-38F~3.40282E+38F |
BINARY_DOUBLE | 64Bit浮動小数点数値型 | 2.22507485850720E-308~1.79769313486231E+308 |
DATE | 日付データ。 | - |
TIMESTAMP | DATE型+ミリ秒のデータ型。 | - |
TIMESTAMP WITH TIMEZONE | DATE型+ミリ秒+タイムゾーンのデータ型。 | - |
BLOB | バイナリデータを格納。 | (4GB-1Byte)×LOB記憶域のCHUNKサイズ |
プライマリーキー(主キー)を指定: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回 表と表領域の関係