テーブルを作成します。
CREATE TABLE [ IF NOT EXISTS ] table-name ( { column-definition | table-constraint| sync-constraint }, ... )
column-definition : column-name data-type [ [ NOT ] NULL ] [ DEFAULT column-default] [STORE AS FILE (file-name-column) [CASCADE DELETE ] [ column-constraint ]
column-default : AUTOFILENAME(prefix,extension) | GLOBAL AUTOINCREMENT [ ( number ) ] | AUTOINCREMENT | CURRENT DATE | CURRENT TIME | CURRENT TIMESTAMP | CURRENT UTC TIMESTAMP | NULL | NEWID( ) | constant-value
file-name "filename"
column-constraint : PRIMARY KEY | UNIQUE
table-constraint : { [ CONSTRAINT constraint-name ] pkey-constraint | fkey-constraint | unique-key-constraint } [ WITH MAX HASH SIZE integer ]
pkey-constraint :
PRIMARY KEY [ ordered-column-list ]
fkey-constraint : [ NOT NULL ] FOREIGN KEY [ role-name ] ( ordered-column-list ) REFERENCES table-name ( column-name, ... ) [ CHECK ON COMMIT ]
unique-key-constraint : UNIQUE ( ordered-column-list )
ordered-column-list : ( column-name [ ASC | DESC ], ... )
sync-constraint :SYNCHRONIZE {ON| OFF| ALL| DOWNLOAD}
IF NOT EXISTS 句 この句は、テーブルを作成するために使用します。指定された名前のテーブルがすでに存在する場合、変更は行われず、エラーは返されません。
column-definition テーブル内のカラムを定義します。この句には、次のパラメータを使用できます。
column-name カラム名は識別子です。同じテーブル内の 2 つのカラムが同じ名前を持つことはできません。Ultra Light の識別子を参照してください。
Ultra Light Java Edition データベースは、データベースファイルの分割をサポートしているので、たとえば、外部ファイルを使用して大きな BLOB 値を保存し、そのファイルを 2 つのカラムで参照し、最初のカラムには、データ型が CHAR(size) ... AUTOFILENAME(...) のファイル名を格納し、2 番目のカラムはファイルコンテンツへのアクセスに使用して、LONG BINARY STORE AS ... データ型として宣言するといったことが可能です。ファイルコンテンツのカラムは読み取り専用です。
data-type カラムのデータ型です。Ultra Light SQL データ型を参照してください。
[NOT] NULL NOT NULL が指定されているか、カラムが PRIMARY KEY または UNIQUE 制約下にある場合、カラムはいずれのローでも NULL を持つことはできません。それ以外の場合は、NULL は許可されます。
column-default カラムのデフォルト値を設定します。DEFAULT 値を指定する場合、カラムの値を指定しない INSERT 文のカラムの値としてこのデフォルト値が使用されます。INSERT 文はカラムの値を指定しません。DEFAULT を指定しない場合、DEFAULT NULL と等しくなります。デフォルトのオプションを以下に示します。
AUTOFILENAME この句では、分割された Ultra Light Java Edition データベースへの外部 BLOB ファイルの格納がサポートされています。
データベースを分割するときに、ファイル名を格納するように指定されたカラムには、AUTOFILENAME(prefix,extensio) 句が必要です。この句では、ダウンロードされた BLOB 値用の新しいファイル名をどのように生成するかを指定します。prefix 値と extension 値は文字列リテラル定数です。Connection.OPTION_BLOB_FILE_BASE_DIR 変数 [BlackBerry] [Ultra Light J]を参照してください。
AUTOINCREMENT AUTOINCREMENT を使用する場合、カラムは整数データ型の 1 つ、または真数値型にします。テーブルに挿入する場合、AUTOINCREMENT カラムの値を指定しないと、カラム内の任意の値より大きいユニーク値が生成されます。INSERT で、カラムの現在の最大値より大きい値を指定した場合、この値が後続の挿入処理の開始ポイントとして使用されます。
Ultra Light では、テーブルが作成された時点でのオートインクリメントの初期値は 0 ではありません。カラムに符号付きデータ型が指定されている場合は、オートインクリメントによって負の値が生成されます。このため、オートインクリメントを適用するカラムを符号なし整数として宣言し、負の値が生成されないようにしてください。
GLOBAL AUTOINCREMENT ドメインが分割されるという点を除いて、AUTOINCREMENT と同じです。各分割には同じ数の値が含まれます。データベースの各コピーにユニークなグローバルデータベース ID 番号を割り当てます。Ultra Light では、データベースのデフォルト値は、そのデータベース番号でユニークに識別された分割からのみ設定されます。
カラムの型が BIGINT または UNSIGNED BIGINT である場合、デフォルトの分割サイズは 2^32 = 4294967296 です。それ以外の型のカラムの場合、デフォルトの分割サイズは 2^16 = 65536 です。特に、カラムの型が INT または BIGINT ではない場合は、これらのデフォルト値が適切ではないことがあるため、分割サイズを明示的に指定するのが最も賢明です。
Ultra Light の GLOBAL AUTOINCREMENT カラムとUltra Light global_database_id オプションを参照してください。
[NOT] NULL カラムに NULL を格納できるかどうかを制御します。
NEWID() ユニークな識別子の値を生成する関数です。NEWID 関数 [その他]を参照してください。
CURRENT TIMESTAMP CURRENT DATE と CURRENT TIME を結合して、TIMESTAMP 値を形成します。年、月、日、時、分、秒、秒の小数位で構成されます。秒は小数第 3 位まで格納されます。精度はシステムクロックの精度によって制限されます。CURRENT TIMESTAMP 特別値を参照してください。
| CURRENT UTC TIMESTAMP TIMESTAMP WITH TIMEZONE の値には、年、月、日、時、分、秒、秒の小数位、タイムゾーンで構成される協定世界時 (UTC: Coordinated Universal Time) が含まれます。秒は小数第 3 位まで格納されます。精度はシステムクロックの精度によって制限されます。CURRENT UTC TIMESTAMP 特別値を参照してください。
CURRENT DATE 現在の年、月、日を格納します。CURRENT DATE 特別値を参照してください。
CURRENT TIME 現在の時、分、秒 (小数位あり) で構成される時刻を格納します。CURRENT TIME 特別値を参照してください。
constant-value カラムのデータ型の定数です。通常、この定数は数値または文字列です。
STORE AS FILE (file-name-column) [CASCADE DELETE] Ultra Light Java Edition データベースでのみサポートされます。
外部保存される LONG BINARY カラム (データベース分割) を指定し、外部保存される BLOB 値のファイル名の保存に使用されるカラムを命名する file-name-column を指定します。この句を持つカラムは LONG BINARY 型で読み取り専用カラムとして動作する必要があります。
column-constraint 句 カラム制約を指定して、カラムに許容される値を制限します。カラム制約は次のいずれかです。
PRIMARY KEY column-constraint の一部として設定するときに、PRIMARY KEY 句はテーブルのプライマリキーとしてカラムを設定します。プライマリキーは、テーブル内の各ローをユニークに識別します。デフォルトでは、プライマリキーに含まれるカラムには NULL を使用できません。
UNIQUE テーブル内の各ローをユニークに識別する 1 つまたは複数のカラムを識別します。テーブル内の異なるローが、指定されているすべてのカラムで同じ値を持つことはできません。1 つのテーブルに複数の一意性制約が存在することがあります。NULL 値は使用できません。
table-constraint 句 テーブル制約を指定して、テーブル内の 1 つまたは複数のカラムに格納できる値を制限します。CONSTRAINT 句を使用して、テーブル制約の識別子を指定します。以下に定義するように、テーブル制約は、プライマリキー制約、外部キー制約、一意性制約のいずれかの形式にできます。
pkey-constraint 句 テーブルのプライマリキーとして、指定したカラムを設定します。プライマリキーは、テーブル内の各ローをユニークに識別します。プライマリキーに含まれるカラムには NULL を使用できません。
fkey-constraint 句 外部キー制約を指定して、1 つまたは複数のカラムの値を、別のテーブルのプライマリキー (または一意性制約) の値と一致するように制限します。
NOT NULL 句 NOT NULL を指定して、外部キーカラムを NULL 入力不可にします。外部キー内の NULL は、外部テーブルのこのローに該当するローがプライマリテーブル内にないことを意味します。複数カラムの外部キー内の少なくとも 1 つの値が NULL である場合、キーの他のカラムに保持できる値に関する制限はありません。
role-name 句 role-name を指定して、外部キーに名前を付けます。role-name は、同じテーブル内で外部キーを区別する場合に使用します。また、CONSTRAINT constraint-name を使用して外部キーに名前を付けることができます。ただし、両方のメソッドを使用して外部キーに名前を付けないでください。
REFERENCES 句 REFERENCES 句を指定し、プライマリテーブルで、外部キー制約として使用する 1 つまたは複数のカラムを定義します。REFERENCES カラム制約に column-name を指定する場合、一意性制約またはプライマリキーの制約を受ける、プライマリテーブルのカラム名を指定します。
CHECK ON COMMIT Ultra Light Java Edition データベースではサポートされていません。データベースサーバで、COMMIT を待ってから外部キー制約を実行するように、CHECK ON COMMIT を指定します。デフォルトでは、挿入、更新、削除の各操作中に、外部キー制約がただちに実行されます。ただし、CHECK ON COMMIT を設定すると、データベースの変更が外部キー制約に違反している場合でも、次の COMMIT 前にデータの不整合が解決されればデータベースの変更を任意の順序で実行できます。
unique-key-constraint 句 一意性制約を指定して、テーブル内の各ローをユニークに識別する 1 つ以上のカラムを指定します。テーブル内の異なるローが、指定されているすべてのカラムで同じ値を持つことはできません。1 つのテーブルに複数の一意性制約が存在することがあります。
WITH MAX HASH SIZE このインデックスのハッシュサイズをバイト単位で設定します。この値は、データベースに対して有効なデフォルトの MaxHashSize プロパティを上書きします。 デフォルトのサイズの詳細については、データベースプロパティの読み取りを参照してください。Ultra Light max_hash_size 作成パラメータを参照してください。
sync-constraint 句 テーブルを同期可能にするかどうかおよびすべてのローをアップロードするか、テーブルへの変更だけをアップロードするか、テーブルへの変更をアップロードしないかを決定するための同期制約を指定します。
SYNCHRONIZE ON デフォルト設定 - テーブルを同期することができ、テーブルへの変更のみがアップロードで送信されます。
SYNCHRONIZE OFF テーブルを同期できず、テーブルをパブリケーションに含めるときにエラーが発生します。
SYNCHRONIZE ALL テーブルを同期することができ、テーブル内のすべてのローがアップロードで送信されます。この制約は、Ultra Light Java Edition データベースではサポートされていません。
SYNCHRONIZE DOWNLOAD テーブルを統合データベースへの変更と同期できますが、ローカルの変更はアップロードされません。
通常、カラム制約を使うのは、制約がテーブル内で複数の他カラムを参照しない場合です。複数のカラムを参照する場合は、テーブル制約を使用します。この文によって制約違反が発生した場合、文の実行は完了しません。エラーの検出前に文が行った変更が完了していない場合は、エラーがレポートされます。
テーブル内の各ローは、ユニークなプライマリキー値を持ちます。
役割名を指定しない場合、役割名は以下のように設定されます。
テーブル名と同じ役割名を含む外部キーが存在しない場合、テーブル名が役割名として割り当てられます。
テーブル名がすでに使用されている場合、役割名は、0 が埋め込まれた、テーブルに固有の 3 桁の数字と結合されたテーブル名になります。
スキーマの変更 スキーマの変更が同時に開始された場合、文は解放されません。Ultra Light データベースのスキーマを参照してください。
CREATE TABLE 文の処理中は、そのテーブルを参照する要求やクエリは処理されません。また、データベースにアクティブなクエリやコミットされていないトランザクションがある場合は CREATE TABLE を実行できません。
Ultra Light.NET の場合:すべてのデータオブジェクト (たとえば ULDataReader) に対して Dispose メソッドも呼び出さないと、この文を実行できません。ULBulkCopy.Dispose メソッド [Ultra Light.NET]を参照してください。
外部 BLOB カラムの同期 (Ultra Light J のみ) 統合データベースでは、ファイル名カラムは通常の CHAR カラムとして格納され、BLOB ファイルカラムは通常の BLOB (LONG BINARY) カラムとして格納されます。ダウンロード時には、ファイル名カラムは無視され、データベースオプション (Connection.OPTION_BLOB_FILE_BASE_DIR) と、DEFAULT AUTOFILENAME 句で指定したプレフィクスと拡張子の文字列を使用して新しいファイル名が生成されます。J2SE の場合、ファイル名カラムに保存された値は構文 <database_option_blob_file_base_dir><prefix><auto generated integer value>.<extension> に一致し、BlackBerry の場合、保存された値は構文 <prefix><auto generated integer value>.<extension> に一致します。このため、BlackBerry の場合、生成されるファイル名は常に相対的になります。
外部 BLOB カラムへのアクセス (Ultra Light J のみ) 外部 BLOB 値を含むファイルは、クライアントアプリケーションがカラム値を読み取ろうとする場合にのみ開かれます。その時点で、STORE AS FILE 句で指定されたカラムに保存されたファイル名は無効なファイル名になります。BlackBerry では、相対ファイル名はデータベースオプション OPTION_BLOB_FILE_BASE_DIR に対して解決されます。Ultra Light でファイル名がプレフィクス "file://" で始まっていないと判断された場合、そのファイルが開かれる前に、ファイル名の先頭に OPTION_BLOB_FILE_BASE_DIR オプションの値が付加されます。
BLOB ファイルは、file-name-column カラムのファイル名を指定することによって、データベースに挿入されます。挿入されたファイル名は有効なファイル名である必要があり、Blackberry の場合、IETF RFCs 1738 & 2396 のファイル URL 形式で記述された完全修飾の絶対パスファイル名の形式に従う必要があります (BlackBerry JDE API ドキュメントのパッケージの javax.microedition.io.file の説明を参照)。挿入時に、STORE AS FILE カラムの値が指定されない場合があります。
ファイルがデータベースに挿入されると、データベースはファイルに対してフルコントロール権を持ち、外部変更が行われないと見なします。
オートコミット
次の文は、図書データベース用にテーブルを作成し、図書情報を保持します。
CREATE TABLE library_books ( isbn CHAR(20) PRIMARY KEY, copyright_date DATE, title CHAR(100), author CHAR(50), location CHAR(50), FOREIGN KEY location REFERENCES room ) |
次の文は、図書データベース用にテーブルを作成して、貸し出し図書の情報を保持します。date_borrowed のデフォルト値は、エントリが作成される日に本が貸し出されることを示します。date_returned カラムは、本が返却されるまでは NULL です。
CREATE TABLE borrowed_book ( loaner_name CHAR(100) PRIMARY KEY, date_borrowed DATE NOT NULL DEFAULT CURRENT DATE, date_returned DATE, book CHAR(20), FOREIGN KEY (book) REFERENCES library_books (isbn) ) |
次の文は、販売データベース用にテーブルを作成し、注文と注文項目情報を保持します。
CREATE TABLE Orders ( order_num INTEGER NOT NULL PRIMARY KEY, date_ordered DATE, name CHAR(80) ); CREATE TABLE Order_item ( order_num INTEGER NOT NULL, item_num SMALLINT NOT NULL, PRIMARY KEY (order_num, item_num), FOREIGN KEY (order_num) REFERENCES Orders (order_num) ) |
![]() |
DocCommentXchange で意見交換できます
|
Copyright © 2013, SAP AG or an SAP affiliate company. - SAP Sybase SQL Anywhere 16.0 |