CREATE TABLE(表定義)
機能
表を定義します。
使用権限
形式
次の形式中の項番は,オペランドの番号と対応しています。
項番 | 形 式 |
---|---|
CREATE 〔〔SHARE〕FIX〕 TABLE | |
〔認可識別子.〕表識別子 | |
(表要素〔,表要素〕…) | |
〔{IN{表格納用RDエリア名 | |
〔表オプション〕… | |
〔表制約定義〕… | |
〔WITH PROGRAM〕 |
項番 | 形 式 |
---|---|
表要素::={列定義|表制約定義} | |
列定義::=列名 データ型〔ARRAY [最大要素数]〕 | |
列データ抑制指定::=〔SUPPRESS〕 | |
列回復制約::=〔RECOVERY〔{ALL|PARTIAL|NO}〕〕 | |
抽象データ型定義内LOB格納用RDエリア指定::= | |
プラグイン指定::=PLUGIN プラグインオプション | |
DEFAULT句::=DEFAULT 〔既定値〕 | |
列制約::={非ナル値制約指定 | |
更新可能列属性::=UPDATE 〔ONLY FROM NULL〕 | |
非ナル値制約指定::= | |
単一列一意性制約定義::= | |
インデクスオプション::={PCTFREE=未使用領域の比率 | |
単一列検査制約定義::=CHECK(探索条件) | |
単一列参照制約定義::=参照指定 | |
表制約定義::={複数列一意性制約定義 | |
複数列一意性制約定義::= | |
複数列検査制約定義::=CHECK(探索条件) | |
複数列参照制約定義::=FOREIGN KEY(列名 〔,列名〕…)参照指定 | |
格納条件::=列名{=|<>|^=|!=|<|<=|>|>=} | |
- | 第1次元列名::=列名 |
ハッシュ関数名::={HASH1|HASH2|HASH3|HASH4|HASH5|HASH6|HASH0 | |
参照指定::=REFERENCES 被参照表 〔参照制約動作指定〕 | |
制約名定義::=CONSTRAINT 制約名 | |
表オプション::= |
オペランド
表3-27 表格納RDエリアの指定を省略したときの表格納RDエリアの決定方法
プライマリー キー又は クラスタ キーの指定 | インデクス格納 RDエリアの 指定※ | 表格納RDエリアの決定方法 |
---|---|---|
なし | - | 次に示す優先順位で表格納RDエリアを決定します。
|
あり | なし | 次に示す優先順位で表格納RDエリアを決定します。
|
インナレプリカ機能を適用しないRDエリア |
| |
インナレプリカ機能を適用するRDエリア(オリジナルRDエリア) |
|
表3-28 WITHOUT ROLLBACK指定時の行の更新処理(追加,削除を含む)の行排他,及びロールバック可否
操作対象 | 表に対する操作内容 | ||||
---|---|---|---|---|---|
行の挿入 | 行中の列の更新 | 行の削除 | |||
更新値が更新前の値と同じ | 更新値が更新前の値と異なる | ||||
インデクスが定義されたWITHOUT ROLLBACK指定の表 | 更新対象列がインデクス構成列である。 | 行排他はトランザクション終了時に解除されます。処理完了後もトランザクション未終了時はロールバックできます。 | 行排他は行の更新処理完了を契機に解除されます。処理完了後は更新内容をロールバックできません。 | 実行できません。 | 行排他はトランザクション終了時に解除されます。処理完了後もトランザクション未終了時はロールバックできます。 |
更新対象列がインデクス構成列ではない。 | 行排他は行の更新処理完了を契機に解除されます。処理完了後は更新内容をロールバックできません。 | ||||
インデクスが定義されていないWITHOUT ROLLBACK指定の表 | 行排他は行の更新処理完了を契機に解除されます。処理完了後は更新内容をロールバックできません。 |
表3-29 削除禁止最終日付と削除可能日付の関係
行挿入日付 | 削除禁止期間の指定値 | 削除禁止最終日付 | 削除可能日付 |
---|---|---|---|
2002-03-01 | 1か年※1 | 2003-02-28 | 2003-03-01 |
1995-03-01 | 1か年※1 | 1996-02-29 | 1996-03-01 |
2002-02-28 | 1か月※2 | 2002-03-27 | 2002-03-28 |
2002-05-01 | 1か日※3 | 2002-05-01 | 2002-05-02 |
複数の列に一意性制約,検査制約,参照制約を指定します。
制約名定義の指定位置は,システム共通定義pd_constraint_nameオペランドの指定値,又はクライアント環境変数PDCNSTRNTNAMEの指定値によって決まります。制約名定義の指定位置を次の表に示します。
表3-30 制約名定義の指定位置
クライアント環境変数 | システム共通定義 | |||
---|---|---|---|---|
pd_constraint_name | ||||
指定なし | LEADING | TRAILING | ||
PDCNSTRNTNAME | 指定なし | 前 | 前 | 後 |
LEADING | 前 | 前 | 前 | |
TRAILING | 後 | 後 | 後 |
SHAREとFIXを指定している場合,複数列参照制約は指定できません。
列単位に次の制約を指定できます。
制約名定義の指定位置は,システム共通定義pd_constraint_nameオペランドの指定値,又はクライアント環境変数PDCNSTRNTNAMEの指定値によって決まります。詳細は,表制約定義の「表3-30」を参照してください。
SHAREとFIXを指定している場合,単一列参照制約は指定できません。
更新前の列の値 | 更新後の列の値 | 更新可否 |
---|---|---|
ナル値 | ナル値 | ○ |
ナル値 | 非ナル値 | ○ |
非ナル値 | ナル値 | × |
非ナル値 | 非ナル値※ | × |
表種別 | UPDATE指定 | UPDATE ONLY FROM NULL指定 | 左記の 指定なし | |||
---|---|---|---|---|---|---|
指定 可否 | 列の値の更新可否 | 指定 可否 | 列の値の更新可否 | 指定 可否 | 列の値の更新可否 | |
非改竄防止表 | ○ | ○ | ○ | ○ | - | ○ |
改竄防止表 | ○ | ○ | ○ | ○※ | - | × |
表3-31 WITH DEFAULTを指定したときの既定値
データ型 | 列の既定値 | |
---|---|---|
INTEGER | 0 | |
SMALLINT | ||
FLOAT | ||
SMALLFLT | ||
DECIMAL | ||
CHAR | 空白 | |
NCHAR | ||
MCHAR | ||
VARCHAR | 既定文字集合 文字集合(UTF16以外) | 1バイトの空白 |
文字集合(UTF16) | 1文字の空白 | |
NVARCHAR | 1文字の空白 | |
MVARCHAR | 1バイトの空白 | |
DATE | 行追加時の現在の日付 | |
TIME | 行追加時の現在の時刻 | |
TIMESTAMP | 行追加時の現在の時刻印 | |
INTERVAL YEAR TO DAY | 0か年0か月0か日間 | |
INTERVAL HOUR TO SECOND | 0時間0分0秒間 | |
BLOB | 長さ0バイトのデータ | |
BINARY |
注 WITH DEFAULTを指定していない場合,ナル値が列の既定値になります。
表を複数のRDエリアに分割(表の横分割)して格納するための条件を指定します。
格納条件についての規則を次に示します。
表3-32 参照指定指定時の参照表に対する操作
外部キー構成列に対する操作 | 外部キー構成列の行と,外部キーが参照する被参照表の行の関係 | 操作結果 | |
---|---|---|---|
追加(INSERT) | 挿入する行の外部キー構成列の値と等しい主キー構成列の値を持つ行が被参照表中に存在する。 | ○ | |
挿入する行の外部キー構成列の値と等しい主キー構成列の値を持つ行が被参照表中に存在しない。 | 挿入する行の外部キー構成列中にナル値がある。 | ○ | |
挿入する行の外部キー構成列中にナル値がない。 | × | ||
更新(UPDATE) | 更新後の外部キー構成列の値と等しい主キー構成列の値を持つ行が被参照表中に存在する。 | ○ | |
更新後の外部キー構成列の値と等しい主キー構成列の値を持つ行が被参照表中に存在しない。 | 更新後の外部キー構成列中にナル値がある。 | ○ | |
更新後の外部キー構成列中にナル値がない。 | × |
表3-33 CASCADE指定時の被参照表に対する操作,及びそれに伴う参照表への影響
外部キー構成列が参照する被参照表の主キー構成列に対する操作 | 外部キー構成列の行と外部キーが参照する被参照表の行の関係 | 参照表に対する影響 |
---|---|---|
削除(DELETE) | 削除する行の主キー構成列の値と等しい外部キー構成列の値を持つ行が参照表に存在する。 | 行削除 |
削除する行の主キー構成列の値と等しい外部キー構成列の値を持つ行が参照表に存在しない。 | 影響しない | |
更新(UPDATE) | 更新前の主キー構成列の値と等しい外部キー構成列の値を持つ行が参照表に存在する。 | 主キーと等しい値で更新 |
更新前の主キー構成列の値と等しい外部キー構成列の値を持つ行が参照表に存在しない。 | 影響しない |
表3-34 RESTRICT指定時の被参照表に対する操作
外部キー構成列が参照する被参照表の主キー構成列に対する操作 | 外部キー構成列の行と外部キーが参照する被参照表の行の関係 | 操作結果 |
---|---|---|
削除(DELETE) | 削除する行の主キー構成列の値と等しい外部キー構成列の値を持つ行が参照表に存在する。 | × |
削除する行の主キー構成列の値と等しい外部キー構成列の値を持つ行が参照表に存在しない。 | ○ | |
更新(UPDATE) | 更新前の主キー構成列の値と等しい外部キー構成列の値を持つ行が参照表に存在する。 | × |
更新前の主キー構成列の値と等しい外部キー構成列の値を持つ行が参照表に存在しない。 | ○ |
表3-35 HiRDBが作成するトリガの名称
参照制約動作 | トリガ名称 |
---|---|
削除動作 | (DRAyyyymmddhhmmssth) |
更新動作 | (URAyyyymmddhhmmssth) |
表3-36 制約名省略時にHiRDBが仮定する制約名
種類 | 制約名 | 備考 | |
---|---|---|---|
参照制約 | 単一列 参照制約定義 | 制約を指定する列名 | なし |
複数列 参照制約定義 | 外部キーに指定した最初の列名 | なし | |
検査制約 | CK_表番号_yyyymmddhhmmssth | 30文字固定(表番号10文字,時刻16文字) |
表3-37 無効になるオブジェクト
作成バージョン | オブジェクトの内容 | |
---|---|---|
オブジェクトの種類 | 無効になる条件 | |
07-00以降 | 関数,手続き,及びトリガのオブジェクト | REFERENCESで指定した表を使用したUPDATE文,又はDELETE文を含む場合 |
07-00より前 | REFERENCESで指定した表を使用したSQL文を含む場合 |
共通規則
表3-38 定義されるインデクス識別子
指定項目 | インデクス識別子 |
---|---|
CLUSTER | (CLUSTER表番号) |
PRIMARY | (PRIMARY表番号) |
PRIMARY CLUSTER | (PRI-CLS表番号) |
表3-39 既定義型データ長一覧
分類 | データ型及び条件 | データ長(単位:バイト) | ||
---|---|---|---|---|
数値データ | INTEGER | 4 | ||
SMALLINT | 2 | |||
LARGE DECIMAL(m,n)※1 | ↓m÷2↓ +1※2 | |||
FLOAT又はDOUBLE PRECISION | 8 | |||
SMALLFLT又はREAL | 4 | |||
文字データ | CHARACTER(n) | n※3 | ||
VARCHAR(n) | d≦255 | 繰返し列の要素 | d+2 | |
上記以外 | d+1 | |||
d≧256 | 6 | |||
VARCHAR(n) ノースプリットオプション指定あり | n≦255 | 抽象データ型の属性 | d+3 | |
繰返し列の要素 | d+2 | |||
上記以外 | d+1 | |||
n≧256 | 6 | |||
各国文字データ | NCHAR(n)又はNATIONAL CHARACTER(n) | 2×n ※4 | ||
NVARCHAR(n) | d≦127 | 繰返し列の要素 | 2×d+2 | |
上記以外 | 2×d+1 | |||
d≧128 | 6 | |||
NVARCHAR(n) ノースプリットオプション指定あり | n≦127 | 抽象データ型の属性 | 2×d+3 | |
繰返し列の要素 | 2×d+2 | |||
上記以外 | 2×d+1 | |||
n≧128 | 6 | |||
混在文字データ | MCHAR(n) | n※3 | ||
MVARCHAR(n) | d≦255 | 繰返し列の要素 | d+2 | |
上記以外 | d+1 | |||
d≧256 | 6 | |||
MVARCHAR(n) ノースプリットオプション指定あり | n≦255 | 抽象データ型の属性 | d+3 | |
繰返し列の要素 | d+2 | |||
それ以外 | d+1 | |||
n≧256 | 6 | |||
日付データ | DATE | 4 | ||
時刻データ | TIME | 3 | ||
時刻印データ | TIMESTAMP(n) | 7+(n÷2) | ||
日間隔データ | INTERVAL YEAR TO DAY | 5 | ||
時間隔データ | INTERVAL HOUR TO SECOND | 4 | ||
長大データ | BLOB | 9 | ||
バイナリデータ | BINARY(n) | n≦255 | d+3 | |
n≧256 | 15 |
参照制約に関する規則
検査制約に関する規則
留意事項
使用例
CREATE TABLE ZAIKO
(SCODE CHAR(4),SNAME NCHAR(8),
COL NCHAR(1),TANKA INTEGER,ZSURYO INTEGER)
CREATE FIX TABLE ZAIKO
(SCODE CHAR(4),SNAME NCHAR(8),
COL NCHAR(1),TANKA INTEGER,ZSURYO INTEGER)
IN RDA1
PCTFREE=(0,0)
格納条件 | 格納するRDエリア | |
---|---|---|
表データ | インデクス | |
101M ≦ SCODE ≦ 202M | RDA1 | RDA4 |
302S ≦ SCODE ≦ 412M | RDA2 | RDA5 |
591L ≦ SCODE ≦ 591S | RDA3 | RDA6 |
CREATE TABLE ZAIKO
(SCODE CHAR(4)
UNIQUE CLUSTER KEY ASC
IN ((RDA4),(RDA5),(RDA6)),
SNAME NCHAR(8),
COL NCHAR(1),
TANKA INTEGER,
ZSURYO INTEGER)
IN ((RDA1)SCODE<='202M',
(RDA2)SCODE<='412M',
(RDA3))
CREATE TABLE ZAIKO
(SCODE CHAR(4),SNAME NCHAR(8),
COL NCHAR(1),TANKA INTEGER,ZSURYO INTEGER)
IN RDA1
CLUSTER KEY (SNAME ASC,COL DESC) IN RDA2
CREATE TABLE 社員表
(社員No INTEGER,
文書データ BLOB(6000) IN (LRDA1),(LRDA2))
従業員 t_従業員 ALLOCATE(顔写真
IN ((LRDA03),(LRDA04))
) IN ((RDA1)社員No<=700000,(RDA2))
CREATE TABLE JUTYU
(DNO CHAR(6),TCODE CHAR(5),SCODE CHAR(4),
JSURYO INTEGER,JDATE DATE,JTIME TIME,
JINSERTDATE DATE NOT NULL WITH DEFAULT SYSTEM GENERATED)
INSERT ONLY WHILE 10 YEARS BY JINSERTDATE
格納条件 | 格納するRDエリア |
---|---|
SCODE≦202M AND TANKA≦5000 | RDA1 |
SCODE≦202M AND TANKA>5000 | RDA2 |
202M<SCODE≦412M AND TANKA≦5000 | RDA3 |
202M<SCODE≦412M AND TANKA>5000 | RDA4 |
SCODE>412M AND TANKA≦5000 | RDA5 |
SCODE>412M AND TANKA>5000 | RDA6 |
CREATE TABLE ZAIKO
(SCODE CHAR(4) NOT NULL,
TANKA INTEGER NOT NULL)
PARTITIONED BY MULTIDIM (SCODE(('202M'),('412M')),
TANKA((5000)))
IN ((RDA1,RDA2),(RDA3,RDA4),(RDA5,RDA6))
CREATE TABLE ZAIKO
(SCODE CHAR(4) CONSTRAINT CHECK_SIZE
CHECK(SCODE LIKE '%S' OR SCODE LIKE '%M' OR SCODE LIKE '%L'),
SNAME NCHAR(8),
COL NCHAR(1),TANKA INTEGER,ZSURYO INTEGER)
被参照表(部名表(DEPT1))を定義し,主キーを部コード(DNO)列にします。
CREATE TABLE DEPT1
(DNO CHAR(3) PRIMARY KEY,DNAME NVARCHAR(20),MGR CHAR(8))
参照表(氏名表(EMP1))を定義し,外部キーを部コード(DNO)列にします。
CREATE TABLE EMP1
(ENO CHAR(8),ENAME NVARCHAR(25),
DNO CHAR(3)
CONSTRAINT EMP1_K REFERENCES DEPT1 ON DELETE CASCADE)
被参照表(課名表(DEPT2))を定義し,主キーを部コード(DNO)列,課コード(SNO)列にします。
CREATE TABLE DEPT2
(DNO CHAR(3),SNO CHAR(3),SNAME CHAR(20),CHIEF CHAR(8),
PRIMARY KEY(DNO,SNO))
参照表(氏名表(EMP2))を定義し,外部キーを部コード(DNO)列,課コード(SNO)列にします。
CREATE TABLE EMP2
(ENO CHAR(8),ENAME CHAR(25),DNO CHAR(3),SNO CHAR(3),
CONSTRAINT EMP2_K FOREIGN KEY(DNO,SNO) REFERENCES DEPT2)