スケーラブルデータベースサーバ 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.