6. AND 7. OR
4.3 SQL コマンドのアルファベット順のリスト コマンドのアルファベット順のリスト コマンドのアルファベット順のリスト コマンドのアルファベット順のリスト
4.3.18 CREATE TABLE
構文 構文構文 構文
図4-27に、CREATE TABLEの構文を示します。
図 図図
図4-27 CREATE TABLEコマンドコマンドコマンドコマンド
BNF表記法表記法表記法表記法
CREATE TABLE [schema .] table column_list [column_list ]...
[AS subquery] ; column_list::=
図4-28に、column_list式の構文を示します。
図図図
図4-28 column_list式式式式
BNF表記法表記法表記法表記法
"("
column datatype [DEFAULT expr|AUTO INCREMENT][column_constraint]
[column_constraint]...
[table_constraint]
[, column datatype [DEFAULT expr|AUTO INCREMENT][column_constraint]
[column_constraint]...
[table_constraint]]...
")"
SQLコマンドのアルファベット順のリスト
SQLコマンド 4-55 前提条件前提条件前提条件
前提条件
ユーザーのスキーマまたは別のスキーマ内に表を作成するには、データベースにSYSTEMと して、またはDBA/DDL権限を持つユーザーとしてログインする必要があります。
用途 用途用途 用途
データベース表を作成します。
CREATE TABLEコマンドは、指定された副問合せの結果に基づいてデータベースを作成し 移入します。列のデータ型は、副問合せの結果セットから導出されます。詳細は、「使用上 の注意」を参照してください。
表4-23に、CREATE TABLEコマンドの引数をリストします。
表 表表
表4-23 CREATE TABLEコマンドで使用される引数コマンドで使用される引数コマンドで使用される引数コマンドで使用される引数 引数
引数引数
引数 説明説明説明説明
schema 所有者であるユーザーと同じ名前のスキーマ。省略すると、デ
フォルトのスキーマ名が使用されます。
table データベースの表の名前。表名にはピリオド「.」を含めることは
できません。また、アンダースコア「_」の付いた文字で始めるこ ともできません。
column 表の列の名前。
datatype columnのデータ型。副問合せでは使用できません。
DEFAULT DEFAULT句は、後続のINSERT文が列の値を省略した場合、ユー
ザーがその列に値を割り当てられるようにします。式のデータ型 は、列のデータ型に一致する必要があります。この式を含めるた め、列サイズを増やす必要があります。
DEFAULT式は、列参照を返さない関数、またはネストされた関数
を呼び出さないSQL関数を含めることができます。
DEFAULTの共通の値に関する制限事項の共通の値に関する制限事項の共通の値に関する制限事項の共通の値に関する制限事項
DEFAULT式は、Javaストアド・プロシージャ、他の列、または LEVEL、PRIORおよびROWNUMという疑似列への参照を含めるこ とはできません。
DEFAULT式には副問合せを含めることはできません。
式の詳細は、第1章「SQLの使用方法」および1.8項「式の指定」
を参照してください。
SQLコマンドのアルファベット順のリスト
使用上の注意 使用上の注意使用上の注意 使用上の注意
CREATE ANY TABLEを使用して別のスキーマに表を作成できますが、DBA/DDLロールが 必要です。各表は、最大1000列を持つことができ、複数の主キー制約を持つことはできま せん。
column_listが省略された場合は、次のようになります。
■ 副問合せを指定したときに表の列が定義されていない場合、列名は副問合せにより選択 された式から導出されます。
■ 選択リスト内の式に別名が含まれている場合は、列名として別名が使用されます。
■ 式が別名を持たない列の場合、その名前が列名として使用されます。列ではなく、別名 を持たない式は無効です。表の列のデータ型は、副問合せの選択リスト内の対応する式 のデータ型と同じです。
■ 副問合せがUNIONまたはMINUSを含む場合、最初の選択文がこの目的に使用されます。
column_listが省略された場合は、次のようになります。
■ column_list内の列の数は、副問合せの式の数と等しくする必要があります。
■ 列定義は、列名、デフォルト値および整合性制約のみを指定できますが、データ型また は自動増分列は指定できません。
auto increment 列を自動増分列に設定します。
自動増分列のデータ型は、INTEGER型である必要があります。
自動増分列の値は、自動的に増分されて挿入されるため、ユー ザーは値を入力する必要はありません。この値は、表内で一意で あり、NULL値は含みません。また、必要であれば主キー列とし て使用できます。この列の値は、データベース・システムによっ て決定され、ユーザーが増分量、初期値または最大値を管理する 方法はありません。
自動増分列の値は0から始まり、正の最大値は4バイト整数の最
大値(2147483647)です。自動増分値が最大値になると、次の自
動増分値は4バイト整数の最小値(-2147483648)から始まりま す。
column_constraint 列整合性制約を追加します。詳細は、「CONSTRAINT句」を参照
してください。
table_constraint 表整合性制約を追加します。詳細は、「CONSTRAINT句」を参照
してください。
AS subquery SELECT文。
表 表表
表4-23 CREATE TABLEコマンドで使用される引数(続き)コマンドで使用される引数(続き)コマンドで使用される引数(続き)コマンドで使用される引数(続き)
引数 引数引数
引数 説明説明説明説明
SQLコマンドのアルファベット順のリスト
SQLコマンド 4-57
■ 参照整合性制約は、CREATE TABLEの構成では定義できません。かわりに、後で ALTER TABLE文を使用して参照整合性制約を作成できます。
副問合せでORDER BY句が使用された場合、データはその順序で表に挿入されます。これは 通常、列による順序に従ったデータのクラスタとなりますが、保証はされません。
自動増分列を持つ表に値を挿入する場合、自動増分列の値がデータベース・システムによっ て自動的に生成されるため、この列に対する挿入操作はできません。自動増分列を持つ表に 行を挿入する場合、挿入操作を行うための、自動増分列を含まない列リストをユーザーが指 定する必要があります。たとえば、次のような表を定義したとします。
CREATE TABLE t1 (c1 INT AUTO INCREMENT, c2 INT, c3 INT);
表t1に値を挿入するには、次のコマンドを使用します。
INSERT INTO T1(c2,c3) values (123, 456);
ユーザーが列リストを指定しない場合は、エラー・メッセージが表示されます。
挿入文に列リストを使用しないで済むよう、INSERTコマンドを発行する前に自動増分列を 非表示にできます。たとえば、次のALTERコマンドを発行したとします。
ALTER TABLE T1 HIDE C1;
次に、表t1に値を挿入する場合、次のように挿入文から列リストを省略できます。
INSERT INTO T1 VALUES (123,456);
例例例 例1
次の文は、2つの列があるHOTEL_DIR表を作成します。2つの列とは、主キーである HOTEL_NAMEと、NULLにできないCAPACITY(デフォルト値は0)です。
CREATE TABLE HOTEL_DIR (HOTEL NAME CHAR(40) PRIMARY KEY, CAPACITY INTEGER DEFAULT 0 NOT NULL)
例 例例 例2
次の文は、表HOTEL_RESTAURANTを作成します。
CREATE TABLE HOTEL_RESTAURANT(REST_NAME CHAR(50) UNIQUE, HOTEL_NAME CHAR(40) REFERENCES HOTEL_DIR, RATING FLOAT DEFAULT NULL)
列には、次のものが含まれます。
■ REST_NAME - レストラン名。
■ HOTEL_NAME - レストランがあるホテルの名前。
■ RATING - レストランの評価。デフォルト値はNULLです。
SQLコマンドのアルファベット順のリスト
表には、次の整合性制約があります。
■ 2つのホテルまたはレストランが同じ名前を持つことはできない。
■ HOTEL_NAMEは、HOTEL_DIR表内のホテルを参照する必要がある。
関連項目 関連項目関連項目 関連項目
CONSTRAINT句、DROP TABLE、トランザクション制御コマンド、SELECT