CREATE TABLEとはテーブル(表)を作成するSQL文である。
CREATE TABLE [schema.]name (
column_definition [,column_definition ...]
[,out_of_line_constraint ...]
)
[TABLESPACE tablespace]
[PCTFREE 空き領域割合]
[PCTUSED 使用済領域割合]
[CACHE|NOCACHE]
[LOGGING|NOLOGGING]
[STORAGE([INITIAL initial-extent] [NEXT next-extent])]
一時表の作成
CREATE GLOBAL TEMPORARY TABLE [schema.]name (...) ON COMMIT {DELETE|PRESERVE} ROWS
表を作成するスキーマの名前。
schema を省略した場合、自分のスキーマ内に表を作成する。自分のスキーマ以外に表を作成するには、
CREATE ANY TABLE
システム権限が必要である。
作成するテーブルの名前を指定する。名前の付け方には次の規則がある。
_
)、ドル記号($
)及びシャープ記号(#
)のみ含めることができる。列の定義を指定する。
制約を指定する。
表を作成する表領域の名前を指定する。表領域の指定を省略した場合、スキーマの所有者のデフォルトの表領域内に作成される。
データベース・オブジェクトの各データ・ブロック内で、オブジェクトの行を将来更新するために確保しておく領域の割合を0から99までの整数で指定する。デフォルト値は10。
使用済み領域のうち、データベース・オブジェクトのデータブロックごとに確保される最小限の割合を0から99までの整数で指定する。デフォルト値は40。
バッファキャッシュ内のLRUリストの最高使用頻度側に置く。
バッファキャッシュ内のLRUリストの最低使用頻度側に置く。
表のために必要な索引の作成をREDOログに作成する。
表のために必要な索引の作成をREDOログに作成しない。
Oracleデータベースによる永続的なデータベースオブジェクトの格納方法を指定する。
オブジェクトの第1エクステントのサイズを指定する。
オブジェクトに割り当てる次のエクステントサイズを指定する。
一時表を作成する。 一時表 とは、トランザクション終了時又はセッション終了時に切り捨てられる表のことである。一時表のレコードは、作成したセッションからしか参照できない。また、REDOに記録されないので高速に処理される。
一時表はトランザクション内で有効となり、コミット後に切り捨てられる。
一時表はセッション内で有効となり、セッション終了時に切り捨てられる。
列の定義は次の構文で指定する。
column type [DEFAULT value] [constraint ...]
列の名前を指定する。オラクルデータベースの場合、日本語で列の名前を指定することもできるが、他のRDBMSでは日本語を使えないことがある。そのため、移植性を考えるなら日本語の使用は避けた方がよい。
列のデータ型を指定する。
列のデフォルト値を指定する。
列の制約を指定する。空白で区切って複数の制約を指定できる。
制約 | 説明 |
---|---|
NOT NULL | NULLにできない。INSERT文で行を挿入する際、列の値を指定するか、DEFAULT節で初期値が指定されている必要がある。 |
UNIQUE | 値が一意で重複しない必要がある。ただし、NULLが複数あることは構わない。 |
PRIMARY KEY | UNIQUE制約とNOT NULL制約が付く。また、索引が自動的に作成されます。 |
FOREIGN KEY | FOREIGN KEY制約を付けた列は、親表名 によって識別される参照先の表の間で外部キー制約を指定します。 |
CHECK(condition) | condition で指定した条件を満たす必要がある。条件を満たさない値をINSERT文で挿入しようとするとエラーとなり、行の挿入が失敗する。UPDATE文により値を更新しようとする際も同様である。 |
自分のスキーマに表を作成するには、CREATE TABLEシステム権限が必要である。
他のスキーマに表を作成するには、CREATE ANY TABLEシステム権限が必要である。
CREATE TABLE文で表を作成する例を示す。
SQL> CREATE TABLE dept (deptno NUMBER(4), dname VARCHAR(80), loc VARCHAR(80) );
表が作成されました。
SQL>
主キー制約は次の構文で指定する。
[CONSTRAINT constraint] PRIMARY KEY (column [,column...])
表の作成時に主キー制約を設定する例を以下に示す。
CREATE TABLE dept (
deptno NUMBER(2),
dname VARCHAR2(14),
loc VARCHAR2(13),
CONSTRAINT pk_dept PRIMARY KEY (deptno)
);
明示的に主キー制約の名前を指定せず、自動的に名前を付けさせる場合は次のようにする。
CREATE TABLE dept (
deptno NUMBER(2) PRIMARY KEY,
dname VARCHAR2(14),
loc VARCHAR2(13)
);
外部キー制約は次の構文で指定する。
[CONSTRAINT constraint] FOREIGN KEY (column [,column...]) REFERENCES table (column [,column...])
テーブルに作成時に外部キー参照制約を設定する。
CREATE TABLE emp (
empno NUMBER(4),
ename VARCHAR2(10),
job VARCHAR2(9),
mgr NUMBER(4),
hiredate DATE,
sal NUMBER(7,2),
comm NUMBER(7,2),
deptno NUMBER(2),
CONSTRAINT pk_emp PRIMARY KEY (empno),
CONSTRAINT fk_deptno FOREIGN KEY (deptno) REFERENCES dept
);