随時翻訳を続けています。
CREATE TABLE
| sql-command ::= | CREATE [TEMP | TEMPORARY] TABLE [IF
NOT EXISTS] table-name ( column-def [, column-def]* [, constraint]* ) |
| sql-command ::= | CREATE [TEMP | TEMPORARY] TABLE [database-name.] table-name AS select-statement |
| column-def ::= | name [type] [[CONSTRAINT name] column-constraint]* |
| type ::= | typename | typename ( number ) | typename ( number , number ) |
| column-constraint ::= | NOT NULL [ conflict-clause ] | PRIMARY KEY [sort-order] [ conflict-clause ] [AUTOINCREMENT] | UNIQUE [ conflict-clause ] | CHECK ( expr ) | DEFAULT value | COLLATE collation-name |
| constraint ::= | PRIMARY KEY ( column-list ) [ conflict-clause ] | UNIQUE ( column-list ) [ conflict-clause ] | CHECK ( expr ) |
| conflict-clause ::= | ON CONFLICT conflict-algorithm |
CREATE TABLE ステートメントは基本的に、キーワード "CREATE TABLE" 、それに続けて 新しいテーブルの名前、そしてカッコで括られたカラム定義と制約のリストです。 テーブル名は、識別子か文字列のどちらかです。 "sqlite_" で始まるテーブル名はデータベースエンジンによって予約されています。
各カラム定義は、カラム名とそれに続くそのカラムのデータ型そしてひとつまたはそれ以上の オプションのカラム制約です。 カラムのデータ型は、そのカラムにどのようなデータが加えられるか制限しません。 さらなる情報のために Datatypes In SQLite Version 3 を 見てください。 UNIQUE 制約は、インデックスが指定されたカラム上に作られるようにします。 このインデックスは、ユニークキーを含まなくてはなりません。 COLLATE 句は、カラムのテキスト項目を比較する時、どの 照合関数を使うか指定します。 組み込みの BINARY 照合関数がデフォルトで使われます。
DEFAULT 制約は、INSERT を行うときに使うデフォルト値を指定します。 値には、NULL、文字列定数、あるいはナンバーを使えます。 バージョン 3.1.0 以降、デフォルト値には、特別な case-independant キーワード CURRENT_TIME、CURRENT_DATE、CURRENT_TIMESTAMP の一つを同様に使えます。 値が NULL、文字列定数、ナンバーの場合、カラムのための値を指定しない INSERT ステートメントが実行されるときは常に、その値が正確にカラムに挿入されます。 値が CURRENT_TIME、CURRENT_DATE または CURRENT_TIMESTAMP の場合、 現在の UTC 日付や時刻がカラム内に挿入されます。 CURRENT_TIME の形式は、HH:MM:SS です。 CURRENT_DATE の形式は、YYYY-MM-DD です。 CURRENT_TIMESTAMP の形式は "YYYY-MM-DD HH:MM:SS" です。
通常、PRIMARY KEY を指定すると対応するカラム上に単純に UNIQUE インデックスを作ります。 しかしながら、INTEGER 型を持つ単一のカラム上に主キーがある場合、そのカラムは テーブル用の B-Tree の実キーとして内部的に使用されます。 これは、そのカラムがユニークな整数値のみ保持することを意味します。 (これ以外のケースでは、SQLite はカラムに指定されたデータ型を無視するので、 宣言されたデータ型にかかわらずどんな種類のデータでもカラムに加えることが可能です。) てーぶるが INTEGER PRIMARY KEY のカラムを持たない場合、 B-Tree のキーは自動的に 生成される整数です。 行のための B-Tree キーはいつでも、特別な名前 "ROWID"、"OID"、または "_ROWID_" のうち一つを使ってアクセスすることができます。 INTEGER PRIMARY KEY があるかどうかにかかわらずこれは機能します。 INTEGER PRIMARY KEY カラムは、キーワード AUTOINCREMENT を含むことができます。 AUTOINCREMENT キーワードは、B-Tree キーが自動生成される方式を修正します。 自動的な B-Tree キーの生成についての詳細は別に用意しました。
"TEMP" または "TEMPORARY" キーワードが "CREATE" と "TABLE" の間に存在する場合、 作成されるテーブルは同じデータベース接続の中でのみ存在し、 データベース接続を閉じるとき自動的に削除されます。 同様に、一時テーブル上に作成されたすべてのインデックスは一時的なものです。 一時テーブルとインデックスは、メインデータベースファイルとは別のファイルに 格納されます。
<database-name> が指定されている場合、テーブルは名前の付いたデータベースに 作成されます。 <database-name> が "temp" でないなら、<database-name> と TEMP キーワードの 両方を指定することはエラーとなります。 データベース名が指定されず TEMP キーワードも存在しない場合、テーブルはメインデータベースに 作られます。
それぞれの制約に続くオプションの conflict-clause によってその制約の代わりの デフォルト競合解決アルゴリズムを指定できます。 デフォルトは、 ABORT です。 同じテーブル内の個々の制約が、別々の競合解決アルゴリズムを持つ場合があります。 COPY、INSERT または UPDATE コマンドが別々の競合解決アルゴリズムを指定する場合、 CREATE TABLE ステートメントで指定されたデフォルトアルゴリズムに代わり、 そのアルゴリズムが使われます。 さらなる情報のために、ON CONFLICT セクションを 見てください。
CHECK 制約は、バージョン 3.3.0 の時点でサポートされました。 バージョン 3.3.0 以前は、CHECK 制約は解析されましたが実行はされませんでした。
テーブル上の制約の数に明示的な制限はありません。 バージョン 2.8 では、一行に対するデータ量が約1メガバイトに制限されています。 バージョン 3.0 では、行あたりのデータ量に明示的な制限はありません。
CREATE TABLE AS 形式は、問い合わせの結果セットをテーブルに指定します。 テーブルのカラム名は、結果内のカラム名です。
CREATE TABLE ステートメントそれぞれの正確なテキストが、sqlite_master テーブルに 格納されます。 データベースが開かれるときはいつも、すべての CREATE TABLE ステートメントが sqlite_master テーブルから読み込まれ、テーブルレイアウトの SQLite における 内部表現を再現するために使われます。 オリジナルコマンドが CREATE TABLE AS であった場合、同等の CREATE TABLE ステートメントが 合成され、オリジナルコマンドの代わりに sqlite_master に格納されます。 CREATE TEMPORARY TABLE ステートメントのテキストは、sqlite_temp_master テーブルに 格納されます。
オプションの IF NOT EXISTS 句が存在し同じ名前の別のテーブルが存在する場合、 このコマンドは何もしません。
テーブルは、DROP TABLE ステートメントを使って 削除します。