スケーラブルデータベースサーバ HiRDB Version 8 SQLリファレンス
機能
表を定義します。
使用権限
形式
次の形式中の項番は,オペランドの番号と対応しています。
| 項番 | 形 式 |
|---|---|
1 |
CREATE 〔〔SHARE〕FIX〕 TABLE |
2 |
〔認可識別子.〕表識別子 |
3 |
(表要素〔,表要素〕…) |
4 |
〔{IN{表格納用RDエリア名
|(表格納用RDエリア名)
|(〔(表格納用RDエリア名)格納条件,〕…
(表格納用RDエリア名)〔格納条件〕)}
|PARTITIONED BY 列名
IN (〔(表格納用RDエリア名)境界値,〕…
(表格納用RDエリア名)境界値,
(表格納用RDエリア名))
|PARTITIONED BY MULTIDIM
(第1次元列名 第1次元境界値リスト
,{第2次元列名 第2次元境界値リスト
| 〔FIX〕 HASH 〔ハッシュ関数名〕
BY 第2次元列名 〔,第2次元列名〕…})
IN マトリクス分割表格納用RDエリア指定
|〔FIX〕 HASH 〔ハッシュ関数名〕 BY 列名 〔,列名〕…
IN (表格納用RDエリア名,表格納用RDエリア名,…)}〕
|
5 |
〔表オプション〕… |
6 |
〔表制約定義〕… |
27 |
〔WITH PROGRAM〕 |
| 項番 | 形 式 |
|---|---|
3 |
表要素::={列定義|表制約定義} |
7 |
列定義::=列名 データ型〔ARRAY [最大要素数]〕 〔NO SPLIT〕 〔{列データ抑制指定|〔列回復制約〕 {IN {LOB列格納用RDエリア名 |(LOB列格納用RDエリア名) |((LOB列格納用RDエリア名) 〔,(LOB列格納用RDエリア名)〕…) |マトリクス分割LOB列格納用RDエリア指定} |抽象データ型定義内LOB格納用RDエリア指定}}〕 〔プラグイン指定〕 〔DEFAULT句〕 〔列制約…〕 〔更新可能列属性〕 |
8 |
列データ抑制指定::=〔SUPPRESS〕 |
9 |
列回復制約::=〔RECOVERY〔{ALL|PARTIAL|NO}〕〕 |
10 |
抽象データ型定義内LOB格納用RDエリア指定::= ALLOCATE(属性名〔..属性名〕… IN {LOB属性格納用RDエリア名 |(LOB属性格納用RDエリア名) |((LOB属性格納用RDエリア名) 〔,(LOB属性格納用RDエリア名)〕) |マトリクス分割LOB属性格納用RDエリア指定} 〔,属性名〔..属性名〕… IN {LOB属性格納用RDエリア名 |(LOB属性格納用RDエリア名) |((LOB属性格納用RDエリア名) 〔,(LOB属性格納用RDエリア名)〕) |マトリクス分割LOB属性格納用RDエリア指定}〕…) |
11 |
プラグイン指定::=PLUGIN プラグインオプション |
12 |
DEFAULT句::=DEFAULT 〔既定値〕 既定値::={定数|USER|CURRENT_DATE|CURRENT DATE |CURRENT_TIME|CURRENT TIME |CURRENT_TIMESTAMP〔(小数秒精度)〕 〔USING BES〕 |CURRENT TIMESTAMP〔(小数秒精度)〕 〔USING BES〕 |NULL} |
13 |
列制約::={非ナル値制約指定 |単一列一意性制約定義 〔インデクスオプション〔インデクスオプション〕〕 |{ 単一列検査制約定義〔制約名定義〕 |〔制約名定義〕単一列検査制約定義 }※3 |{ 単一列参照制約定義〔制約名定義〕 |〔制約名定義〕単一列参照制約定義}}※3 |
14 |
更新可能列属性::=UPDATE 〔ONLY FROM NULL〕 |
15 |
非ナル値制約指定::= {〔NULL |NOT NULL〔WITH DEFAULT〔SYSTEM GENERATED〕〕〕※2 |〔〔NOT NULL〕 WITH DEFAULT〔SYSTEM GENERATED〕〕}※1 |
16 |
単一列一意性制約定義::= {〔{UNIQUE|PRIMARY}〕 CLUSTER KEY〔{ASC|DESC}〕 〔IN{インデクス格納用RDエリア名 |(インデクス格納用RDエリア名) |((インデクス格納用RDエリア名) 〔,(インデクス格納用RDエリア名)〕…)}〕 |PRIMARY KEY〔{ASC|DESC}〕 〔IN{インデクス格納用RDエリア名 |(インデクス格納用RDエリア名) |((インデクス格納用RDエリア名) 〔,(インデクス格納用RDエリア名)〕…)}〕} |
17 |
インデクスオプション::={PCTFREE=未使用領域の比率 |UNBALANCED SPLIT} |
18 |
単一列検査制約定義::=CHECK(探索条件) |
19 |
単一列参照制約定義::=参照指定 |
6 |
表制約定義::={複数列一意性制約定義 〔インデクスオプション〔インデクスオプション〕〕 |{ 複数列検査制約定義〔制約名定義〕 |〔制約名定義〕複数列検査制約定義 }※3 |{ 複数列参照制約定義〔制約名定義〕 |〔制約名定義〕複数列参照制約定義 }}※3 |
20 |
複数列一意性制約定義::= {〔{UNIQUE|PRIMARY}〕 CLUSTER KEY (列名〔{ASC|DESC}〕〔,列名〔{ASC|DESC}〕〕…) 〔IN{インデクス格納用RDエリア名 |(インデクス格納用RDエリア名) |((インデクス格納用RDエリア名) 〔,(インデクス格納用RDエリア名)〕…) |マトリクス分割インデクス格納用RDエリア指定}〕 |PRIMARY KEY(列名〔{ASC|DESC}〕 〔,列名〔{ASC|DESC}〕〕…) 〔IN{インデクス格納用RDエリア名 |(インデクス格納用RDエリア名) |((インデクス格納用RDエリア名) 〔,(インデクス格納用RDエリア名)〕…)|マトリクス分割インデクス格納用RDエリア指定}〕} |
21 |
複数列検査制約定義::=CHECK(探索条件) |
22 |
複数列参照制約定義::=FOREIGN KEY(列名 〔,列名〕…)参照指定 |
23 |
格納条件::=列名{=|<>|^=|!=|<|<=|>|>=} {定数|(定数〔,定数〕…)} |
− |
第1次元列名::=列名 第2次元列名::=列名 第1次元境界値リスト::=境界値リスト 第2次元境界値リスト::=境界値リスト 境界値リスト::=((境界値)〔,(境界値)〕…) マトリクス分割表格納用RDエリア指定::=2次元格納用RDエリア指定 マトリクス分割インデクス格納用RDエリア指定::=2次元格納用RDエリア指定 マトリクス分割LOB列格納用RDエリア指定::=2次元格納用RDエリア指定 マトリクス分割LOB属性格納用RDエリア指定::=2次元格納用RDエリア指定 2次元格納用RDエリア指定::=(マトリクス分割用RDエリアリスト 〔,マトリクス分割用RDエリアリスト〕…) マトリクス分割用RDエリアリスト::=(RDエリア名〔,RDエリア名〕…) |
24 |
ハッシュ関数名::={HASH1|HASH2|HASH3|HASH4|HASH5|HASH6|HASH0 |HASHA|HASHB|HASHC|HASHD|HASHE|HASHF} |
25 |
参照指定::=REFERENCES 被参照表 〔参照制約動作指定〕 被参照表::=表名 参照制約動作指定::={削除動作 〔更新動作〕|更新動作 〔削除動作〕} 削除動作::=ON DELETE 参照動作 更新動作::=ON UPDATE 参照動作 参照動作::={ CASCADE|RESTRICT} |
26 |
制約名定義::=CONSTRAINT 制約名 |
5 |
表オプション::= {PCTFREE={未使用領域の比率 |(〔未使用領域の比率〕,セグメント内の空きページ比率)} |{LOCK ROW|LOCK PAGE} |SUPPRESS〔DEC〔IMAL〕〕 |WITHOUT ROLLBACK |INDEX LOCK{NONE|PAGE} |SEGMENT REUSE {〔セグメント数〔{K|M|G}〕〕|NO} |INSERT ONLY 〔WHILE {日間隔データ|ラベル付き間隔} BY 列名〕} |
オペランド
表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指定 |
左記の 指定なし |
|||
|---|---|---|---|---|---|---|
| 指定 可否 |
列の値の更新可否 | 指定 可否 |
列の値の更新可否 | 指定 可否 |
列の値の更新可否 | |
| 非改竄防止表 | ○ | ○ | ○ | ○ | − | ○ |
| 改竄防止表 | ○ | ○ | ○ | ○※ | − | × |
| データ型 | 列の既定値 | |
|---|---|---|
| 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)
All Rights Reserved. Copyright (C) 2006, 2016, Hitachi, Ltd.