すべてのプロダクト
Search
ドキュメントセンター

PolarDB:テーブルの作成

最終更新日:Mar 29, 2026

CREATE TABLE は、現在のデータベースに新しい空のテーブルを作成します。このステートメントを実行したユーザーがテーブル所有者になります。テーブルを作成した後、INSERT を使用して行を追加し、ALTER TABLE を使用してその構造を変更したり、制約を追加したりします。

構文

CREATE [ GLOBAL TEMPORARY ] TABLE table_name (
  { column_name data_type [ DEFAULT default_expr ]
  [ column_constraint [ ... ] ] | table_constraint } [, ...]
  )
  [ ON COMMIT { PRESERVE ROWS | DELETE ROWS } ]
  [ TABLESPACE tablespace ]

ここで、column_constraint は次のいずれかです:

[ CONSTRAINT constraint_name ]
{ NOT NULL
  | NULL
  | UNIQUE [ USING INDEX TABLESPACE tablespace ]
  | PRIMARY KEY [ USING INDEX TABLESPACE tablespace ]
  | CHECK (expression)
  | REFERENCES reftable [ ( refcolumn ) ]
      [ ON DELETE action ] }
[ DEFERRABLE | NOT DEFERRABLE ] [ INITIALLY DEFERRED | INITIALLY IMMEDIATE ]

また、table_constraint は次のいずれかです:

[ CONSTRAINT constraint_name ]
{ UNIQUE ( column_name [, ...] )
    [ USING INDEX TABLESPACE tablespace ]
  | PRIMARY KEY ( column_name [, ...] )
      [ USING INDEX TABLESPACE tablespace ]
  | CHECK ( expression )
  | FOREIGN KEY ( column_name [, ...] )
      REFERENCES reftable [ ( refcolumn [, ...] ) ]
      [ ON DELETE action ] }
[ DEFERRABLE | NOT DEFERRABLE ]
[ INITIALLY DEFERRED | INITIALLY IMMEDIATE ]

パラメーター

パラメーター説明
GLOBAL TEMPORARY現在のセッションの終了時に自動的に削除される一時テーブルを作成します。一時テーブル上に作成されたインデックスも一時的なものになります。一時テーブルが永続テーブルと同じ名前を共有する場合、スキーマ修飾名で参照されない限り、永続テーブルは現在のセッションでは表示されません。
table_nameテーブルの名前です。必要に応じて、スキーマ修飾名を使用してテーブルを参照します。
column_nameテーブル内の列の名前です。
data_type列のデータ型です。この値には配列指定子を含めることができます。
DEFAULT default_expr列のデフォルト値の式です。この式には、サブクエリやテーブル内の他の列への参照を含めることはできません。また、そのデータ型は列のデータ型と一致する必要があります。値が挿入されず、デフォルトが定義されていない場合は、NULL が使用されます。
CONSTRAINT constraint_name列制約またはテーブル制約のオプションの名前です。省略した場合、システムが自動的に名前を生成します。
NOT NULL列に NULL 値が含まれることを防ぎます。
PRIMARY KEY (列制約)列の値は、各行を一意に識別し、かつ NULL 以外である必要があります。1つのテーブルにはプライマリキーを1つしか設定できません。プライマリキーの列は、UNIQUE 制約に含めることはできません。PolarDB は、プライマリキーを強制するために自動的にインデックスを作成します。
PRIMARY KEY ( column_name [, ...] ) (テーブル制約)複数の列にまたがる複合プライマリキーを定義します。
CHECK (expression)INSERT または UPDATE 操作を成功させるには、このブール式が true または不明と評価される必要があります。この式には、サブクエリや現在の行以外の変数への参照を含めることはできません。
REFERENCES reftable [ ( refcolumn ) ] [ ON DELETE action ] (列制約)外部キー制約を定義します。refcolumn が省略された場合、reftable のプライマリキーが使用されます。参照される列は、参照先テーブルの UNIQUE または PRIMARY KEY 制約に属している必要があります。参照される列が頻繁に変更される場合は、外部キー列にインデックスを追加して、参照アクションの効率を維持します。
FOREIGN KEY ( column [, ...] ) REFERENCES reftable [ ( refcolumn [, ...] ) ] [ ON DELETE action ] (テーブル制約)複数の列にまたがる外部キー制約を定義します。
ON DELETE action参照されている行が削除されたときに実行されるアクションです。参照アクションは、制約が遅延可能であっても遅延させることはできません。サポートされているアクション: CASCADE (削除された行を参照する行を削除または更新する) および SET NULL (参照している列の値を NULL に設定する)。
DEFERRABLE / NOT DEFERRABLE制約チェックをトランザクションの終了まで遅延できるかどうかを指定します。遅延可能な制約を遅延させるには、SET CONSTRAINTS を使用します。このオプションをサポートするのは外部キー制約のみです。他のすべての制約は遅延不可能です。デフォルト: NOT DEFERRABLE
INITIALLY IMMEDIATE / INITIALLY DEFERRED遅延可能な制約がチェックされるタイミングを指定します。INITIALLY IMMEDIATE は各ステートメントの後に制約をチェックします (デフォルト)。INITIALLY DEFERRED はトランザクションの終了時にチェックします。ランタイムでこれをオーバーライドするには、SET CONSTRAINTS を使用します。
ON COMMITトランザクションブロックの終了時に一時テーブルに対して実行するアクションです。PRESERVE ROWS (デフォルト) はすべての行を保持します。DELETE ROWS はすべての行を削除し、各コミットで TRUNCATE を実行するのと同じです。
TABLESPACE tablespaceテーブルを作成する表領域です。

注意事項

  • スキーマ名が含まれている場合 (例: CREATE TABLE myschema.mytable)、テーブルはそのスキーマに作成されます。それ以外の場合は、現在のスキーマに作成されます。

  • 一時テーブルは常に専用のスキーマに存在します。作成時にスキーマを指定しないでください。

  • テーブル名はスキーマ内で一意でなければなりません。既存のテーブル、シーケンス、インデックス、またはビューの名前と重複することはできません。

  • CREATE TABLE は、テーブルの行を表す複合データ型も作成します。テーブル名は、同じスキーマ内の既存のデータ型の名前と一致することはできません。

  • 1つのテーブルには最大 1,600 列まで含めることができます。実際には、タプルの長さの制約により、有効な上限はこれより低くなる場合があります。

  • 列制約は単一の列に適用されます。テーブル制約は複数の列にまたがって適用されます。管理の便宜上、単一列の制約はどちらの形式でも記述できます。

  • PolarDB は、各 UNIQUE および PRIMARY KEY 制約に対して自動的にインデックスを作成します。明示的にインデックスを作成する必要はありません。

互換性に関する注意事項

PolarDB for Oracle の CREATE TABLE は、以下の点で Oracle データベースとは動作が異なります:

  • 一時テーブルの可視性:一時テーブルは現在のセッションでのみ表示されます。この仕組みは、Oracle データベースのグローバル一時テーブルの仕組みとは異なります。

  • ON COMMIT のデフォルト:デフォルトの動作は PRESERVE ROWS です。Oracle では、デフォルトは DELETE ROWS です。

2つの関連テーブルの作成

次の例では、dept テーブルと、dept を参照する外部キーを持つ emp テーブルを作成します。

CREATE TABLE dept (
    deptno          NUMBER(2) NOT NULL CONSTRAINT dept_pk PRIMARY KEY,
    dname           VARCHAR2(14),
    loc             VARCHAR2(13)
);

CREATE TABLE emp (
    empno           NUMBER(4) NOT NULL CONSTRAINT emp_pk PRIMARY KEY,
    ename           VARCHAR2(10),
    job             VARCHAR2(9),
    mgr             NUMBER(4),
    hiredate        DATE,
    sal             NUMBER(7,2),
    comm            NUMBER(7,2),
    deptno          NUMBER(2) CONSTRAINT emp_ref_dept_fk
                        REFERENCES dept(deptno)
);

UNIQUE 制約の追加

CREATE TABLE dept (
    deptno          NUMBER(2) NOT NULL CONSTRAINT dept_pk PRIMARY KEY,
    dname           VARCHAR2(14) CONSTRAINT dept_dname_uq UNIQUE,
    loc             VARCHAR2(13)
);

列レベルの CHECK 制約の追加

CREATE TABLE emp (
    empno           NUMBER(4) NOT NULL CONSTRAINT emp_pk PRIMARY KEY,
    ename           VARCHAR2(10),
    job             VARCHAR2(9),
    mgr             NUMBER(4),
    hiredate        DATE,
    sal             NUMBER(7,2) CONSTRAINT emp_sal_ck CHECK (sal > 0),
    comm            NUMBER(7,2),
    deptno          NUMBER(2) CONSTRAINT emp_ref_dept_fk
                        REFERENCES dept(deptno)
);

テーブルレベルの CHECK 制約の追加

CREATE TABLE emp (
    empno           NUMBER(4) NOT NULL CONSTRAINT emp_pk PRIMARY KEY,
    ename           VARCHAR2(10),
    job             VARCHAR2(9),
    mgr             NUMBER(4),
    hiredate        DATE,
    sal             NUMBER(7,2),
    comm            NUMBER(7,2),
    deptno          NUMBER(2) CONSTRAINT emp_ref_dept_fk
                        REFERENCES dept(deptno),
    CONSTRAINT new_emp_ck CHECK (ename IS NOT NULL AND empno > 7000)
);

複合プライマリキーの定義

次の例では、empnostartdate に複合プライマリキーを持つ jobhist テーブルを作成します。

CREATE TABLE jobhist (
    empno           NUMBER(4) NOT NULL,
    startdate       DATE NOT NULL,
    enddate         DATE,
    job             VARCHAR2(9),
    sal             NUMBER(7,2),
    comm            NUMBER(7,2),
    deptno          NUMBER(2),
    chgdesc         VARCHAR2(80),
    CONSTRAINT jobhist_pk PRIMARY KEY (empno, startdate)
);

列のデフォルト値の設定

job 列のデフォルトは 'SALESMAN' です。hiredate 列のデフォルトは、行が挿入された日付になります。

CREATE TABLE emp (
    empno           NUMBER(4) NOT NULL CONSTRAINT emp_pk PRIMARY KEY,
    ename           VARCHAR2(10),
    job             VARCHAR2(9) DEFAULT 'SALESMAN',
    mgr             NUMBER(4),
    hiredate        DATE DEFAULT SYSDATE,
    sal             NUMBER(7,2),
    comm            NUMBER(7,2),
    deptno          NUMBER(2) CONSTRAINT emp_ref_dept_fk
                        REFERENCES dept(deptno)
);

特定の表領域でのテーブル作成

CREATE TABLE dept (
    deptno          NUMBER(2) NOT NULL CONSTRAINT dept_pk PRIMARY KEY,
    dname           VARCHAR2(14),
    loc             VARCHAR2(13)
) TABLESPACE diskvol1;

次のステップ

  • 既存のテーブルの構造や制約を変更するには、ALTER TABLE を使用します。

  • テーブルを削除するには、DROP TABLE を使用します。

  • プライマリキーと一意性制約のために自動的に作成されるインデックス以外にインデックスを追加するには、CREATE INDEX を使用します。

  • テーブルにデータを入力するには、INSERT を使用します。