CREATE TABLE (SQL Server Compact)
新しい Microsoft SQL Server Compact 3.5 (SQL Server Compact 3.5) テーブルを作成します。
構文
CREATE TABLE table_name
( { < column_definition > | < table_constraint > } [ ,...n ]
)
< column_definition > ::=
{ column_name data_type }
[ { DEFAULT constant_expression
| [ IDENTITY [ ( seed , increment ) ]
]
} ]
[ ROWGUIDCOL ]
[ < column_constraint > [ ...n ] ]
< column_constraint > ::=
[ CONSTRAINT constraint_name ]
{ [ NULL | NOT NULL ]
| [ PRIMARY KEY | UNIQUE ]
| REFERENCES ref_table [ ( ref_column ) ]
[ ON DELETE { CASCADE | NO ACTION } ]
[ ON UPDATE { CASCADE | NO ACTION } ]
}
< table_constraint > ::=
[ CONSTRAINT constraint_name ]
{ [ { PRIMARY KEY | UNIQUE }
{ ( column [ ,...n ] ) }
]
| FOREIGN KEY
( column [ ,...n ] )
REFERENCES ref_table [ ( ref_column [ ,...n ] ) ]
[ ON DELETE { CASCADE | NO ACTION } ]
[ ON UPDATE { CASCADE | NO ACTION } ]
}
引数
- table_name
新しいテーブルの名前。テーブル名は、識別子のルールに従っている必要があります。table_name は、データベース内で一意である必要があります。table_name には最大で 128 文字まで含めることができます。
column_name
テーブルの列名。列名は識別子のルールに従い、テーブル内で一意である必要があります。注意
SQL Server Compact 3.5 データベース内の列名は、"__sys" で開始しないでください。たとえば、__sysobjects という列名は禁止されています。
- data_type
列のデータ型を指定します。詳細については、「データ型と RDA」を参照してください。
- DEFAULT
挿入の際に明示的な値を指定しない場合に、列に入力される値を指定します。DEFAULT 定義は、IDENTITY プロパティで定義された列を除くすべての列に適用できます。テーブルが削除されると、DEFAULT 定義も削除されます。既定値として定数値を使用できます。
- IDENTITY
新しい列が ID 列であることを示します。テーブルに新しい行が追加されると、SQL Server Compact 3.5 によって列に一意な増分値が設定されます。ID 列は通常、PRIMARY KEY 制約と組み合わせて使用され、テーブルの一意な行識別子の役割を果たします。IDENTITY プロパティは int 型の列にだけ割り当てることができます。ID 列は、1 つのテーブルにつき、1 つだけ作成できます。バインドされた既定値および DEFAULT 制約を ID 列と組み合わせて使用することはできません。seed と increment の両方を指定するか、どちらも指定しないか、いずれかを選択する必要があります。どちらも指定しないときの既定値は (1,1) です。
- seed
テーブルに読み込まれる最初の行に使用する値。
- increment
既に読み込まれている前の行の ID 値に加算される増分値。
ROWGUIDCOL
新しい列が行グローバル一意識別子列であることを示します。1 つのテーブルにつき、1 つの uniqueidentifier 列だけを ROWGUIDCOL 列に指定できます。ROWGUIDCOL プロパティは uniqueidentifier 列にだけ割り当てることができます。また、ROWGUIDCOL プロパティは、テーブルに挿入される新しい行の値を自動的に生成します。
- CONSTRAINT
PRIMARY KEY、UNIQUE、または FOREIGN KEY の各制約定義の開始を示す省略可能なキーワード。制約は、テーブルとテーブルの列にデータ整合性を適用し、特別な種類のインデックスを作成する特殊なプロパティです。
- constraint_name
制約の名前。constraint_name は省略できます。データベース内で一意な名前を指定する必要があります。constraint_name を指定しない場合、制約名は SQL Server Compact 3.5 によって生成されます。
- NULL | NOT NULL
列に NULL 値を許容するかどうかを指定するキーワード。NULL は厳密には制約ではありませんが、NOT NULL と同じ方法で指定できます。
- PRIMARY KEY
一意なインデックスを使用して、特定の 1 つ以上の列にエンティティの整合性を適用する制約。PRIMARY KEY 制約は、1 つのテーブルにつき、1 つだけ作成できます。
UNIQUE
一意なインデックスを使用して、特定の 1 つ以上の列にエンティティの整合性を適用する制約。UNIQUE 制約の列には NULL を指定できますが、列ごとに許可される NULL 値は 1 つだけです。1 つのテーブルは複数の UNIQUE 制約を保持できます。注意
SQL Server Compact 3.5 では、インデックスを使用して PRIMARY KEY 制約および UNIQUE 制約を適用できます。ただし、この機能に依存したり、制約の一部として作成されたインデックスを変更することはお勧めしません。
- FOREIGN KEY...REFERENCES
列内のデータに対して参照整合性を提供する制約。FOREIGN KEY 制約では、列内の各値が、参照されるテーブル内の指定された列に存在する必要があります。
- ref_table
FOREIGN KEY 制約によって参照されるテーブルの名前。
- ( ref_column [ ,...n ] )
FOREIGN KEY 制約によって参照されるテーブルの 1 つの列または列のリスト。
ON DELETE {CASCADE | NO ACTION}
作成されたテーブルの行が参照関係を持ち、参照されている行が親テーブルから削除された場合に、その行に対して実行される操作を指定します。既定値は NO ACTION です。CASCADE を指定した場合、参照されている行が親テーブルから削除されると、参照元テーブル内の対応する行も削除されます。NO ACTION を指定した場合、SQL Server Compact 3.5 からエラーが返され、親テーブル内で参照されている行の削除操作がロールバックされます。
ON UPDATE {CASCADE | NO ACTION}
作成されたテーブルの行が参照関係を持ち、参照されている行が親テーブル内で更新された場合に、その行に対して実行される操作を指定します。既定値は NO ACTION です。CASCADE を指定した場合、参照されている行が親テーブル内で更新されると、参照元テーブル内の対応する行も更新されます。NO ACTION を指定した場合、SQL Server Compact 3.5 からエラーが返され、親テーブル内で参照されている行の更新操作がロールバックされます。
- column
テーブル制約で使われる、かっこで囲まれた 1 つの列または列のリスト。制約定義で使われている列を示します。
解説
列定義
テーブルを作成するときは、少なくとも 1 つの列定義を指定する必要があります。
制約
- PRIMARY KEY 制約
- テーブルに含めることができる PRIMARY KEY 制約は 1 つだけです。
- 個々の PRIMARY KEY はインデックスを生成します。
- PRIMARY KEY 制約中で定義する列はすべて、NOT NULL として定義する必要があります。NULL 値を許容するかどうかを指定しない場合、PRIMARY KEY 制約の影響を受けるすべての列は NOT NULL に設定されます。
- UNIQUE 制約
- UNIQUE 制約はそれぞれインデックスを生成します。
- FOREIGN KEY 制約
- FOREIGN KEY 制約の列に NULL 以外の値を入力するときは、参照される列にその値が存在している必要があります。存在していないと外部キー違反のエラー メッセージが返されます。
- FOREIGN KEY 制約は同じテーブル内の他の列を参照できます ("自己参照")。ただし、FOREIGN KEY 制約を使用して、自己参照または循環参照の FOREIGN KEY 制約を作成することはできません。
- 列レベルの FOREIGN KEY 制約の REFERENCES 句は、参照列を 1 つだけ列挙できます。この参照列は、制約が定義されている列と同じデータ型を持っている必要があります。
- テーブル レベルの FOREIGN KEY 制約の REFERENCES 句は、制約列リスト内の列数と同じ数の参照列を持っている必要があります。また、各参照列のデータ型は、列リスト内の、参照列に対応する列と同じである必要があります。
- FOREIGN KEY 制約が参照できる列は、参照されるテーブルに含まれる PRIMARY KEY 制約または UNIQUE 制約の列だけです。FOREIGN KEY 制約は、一意なインデックスを参照できません。
- 制約に関する追加情報
- 制約に対して作成されたインデックスを DROP INDEX ステートメントを使用して削除することはできません。制約を削除するには、ALTER TABLE DROP CONSTRAINT ステートメントを使用する必要があります。
- 制約名は識別子のルールに従う必要があります。ただし、名前を番号記号 (#) で開始することはできません。CONSTRAINT キーワードと constraint_name を指定しない場合、システムによって生成された名前がこの制約に割り当てられます。
- INSERT ステートメント、UPDATE ステートメント、または DELETE ステートメントで制約の違反があった場合、そのステートメントは終了します。
DEFAULT 定義
列は DEFAULT 定義を 1 つだけ持つことができます。DEFAULT 定義は、定数値または定数関数を含むことができます。
テーブル定義内での NULL 値許容のルール
列の NULL 値の許容とは、その列にデータとして NULL 値を入力できるかどうかを決めるものです。NULL は 0 でも空白でもありません。これは、何も入力されなかったこと、または明示的な NULL が指定されたことを意味し、通常は、値が未知であること、または使用できないことを示します。
例
以下のコード例を参照してください。
- PRIMARY KEY として ID 列を持つ 2 列のテーブルを作成します。
- PRIMARY KEY 制約を持つ 1 列のテーブルを作成します。
- 別のテーブルの列を参照する列を持つテーブルを作成します。
CREATE TABLE MyCustomers (CustID int IDENTITY (100,1) PRIMARY KEY, CompanyName nvarchar (50))
CREATE TABLE MyCustomers2 (CustID int CONSTRAINT pkCustId PRIMARY KEY)
CREATE TABLE MyOrders (OrderID int, CustID int REFERENCES MyCustomers(CustID))