OracleDB

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

2018年6月6日

こんにちは!土門大貴(daikidomon)です。

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
CLOB4KBを超える文字列最大2^32-1Byte
NCLOB4KBを超える各国語文字列最大2^32-1Byte
NUMBER固定小数点数値型精度p(1〜38桁)、位取りs(-84〜127桁:省略時は0)
BINARY_FLOAT32Bit浮動小数点数値型1.17549E-38F~3.40282E+38F
BINARY_DOUBLE64Bit浮動小数点数値型2.22507485850720E-308~1.79769313486231E+308
DATE日付データ。-
TIMESTAMPDATE型+ミリ秒のデータ型。-
TIMESTAMP WITH TIMEZONEDATE型+ミリ秒+タイムゾーンのデータ型。-
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回 表と表領域の関係

関連記事

-OracleDB

Copyright© スタートアップIT企業社長のブログ , 2020 All Rights Reserved.