SQLiteでテーブルを作成するには、CREATE TABLE
を使用します ステートメント。
このステートメントは、テーブル名、列名とその定義、およびその他のオプションを受け入れます。
例
これが基本的な例です。
CREATE TABLE Products(
ProductId INTEGER PRIMARY KEY AUTOINCREMENT,
ProductName TEXT NOT NULL,
Price NUMERIC
);
したがって、この場合、Products
はテーブルの名前であり、3つの列が含まれています。 ProductId
、ProductName
、およびPrice
。
この例では、各列のデータ型といくつかの制約を追加しましたが、これらはすべてオプションです。
スキーマを指定する
テーブルの名前には、(オプションで)スキーマ名を前に付けることができます。これを行うとき、スキーマ名はmain
のいずれかである必要があります 、temp
、または接続されているデータベースの名前。
代わりにこれを行うことができます:
CREATE TABLE Store.Products(
ProductId,
ProductName,
Price
);
この場合、Store
テーブルを作成する接続済みデータベースの名前です。
列名の後には、データ型と任意の制約を続けることができます。
データ型はオプションです
はい、あなたはその権利を読んでいます–データ型は実際にはオプションです。
SQLiteは動的型付けを使用するため、値のデータ型はコンテナ(列)ではなく、値自体に関連付けられます。これは、列を作成するときにデータ型を指定する必要がある他のほとんどのSQLデータベースシステムとは対照的です。
代わりにこれを行うことができます:
CREATE TABLE Products(
ProductId,
ProductName,
Price
);
制約とその他のオプション
各列に適用する制約やその他のオプションを指定するオプションがあります。これらには次のものが含まれます:
-
DEFAULT
句。これは、テーブルの各列のデフォルト値または式を指定します。 -
COLLATE
列のデフォルトの照合シーケンスとして使用する照合シーケンスの名前を指定する句。デフォルト値はBINARYです。 PRIMARY KEY
句。オプションで、列が主キーであることを指定できます。 SQLiteでは、単一列と複合(複数列)主キーの両方がサポートされています。- SQLiteは、UNIQUE、NOT NULL、CHECK、およびFOREIGNKEY制約もサポートしています。
- 生成された列制約(計算列とも呼ばれます)。これらは、値が同じ行の他の列の関数である列です。
- テーブルが
WITHOUT ROWID
であるかどうか テーブル。これは、SQLiteがデフォルトで使用する特別な列である「rowid」列を省略するパフォーマンス最適化手法です。この手法の詳細については、SQLiteのドキュメントを参照してください。
一時テーブル
TEMP
のいずれかを使用して、テーブルが一時テーブルであることを指定できます。 またはTEMPORARY
キーワード。
これらのキーワードのいずれかを使用する場合は、CREATE
の間に挿入する必要があります およびTABLE
。
次に例を示します:
CREATE TEMP TABLE Products(
ProductId,
ProductName,
Price
);
temp
を追加することもできます 必要に応じてスキーマ。
SQLiteで一時テーブルを作成するその他の例については、一時テーブルを作成する方法を参照してください。
別のテーブルからテーブルを作成する
CREATE TABLE ... AS SELECT
を使用することもできます 別のテーブルに基づいて新しいテーブルを作成するステートメント。これを行うと、新しいテーブルにSELECT
からのデータが入力されます ステートメント(別の1つまたは複数のテーブルからデータを選択します)。
基本的な例は次のとおりです。
CREATE TABLE Store.Products2 AS
SELECT * FROM Store.Products;
この例では、Products2
という新しいテーブルを作成します Products
からのすべてのデータを入力します テーブル。
すべての列名は元のテーブルと同じです。
この方法で作成されたテーブルには主キーがなく、いかなる種類の制約もないことに注意することが重要です。また、各列のデフォルト値はNULL
です。 。また、新しいテーブルの各列のデフォルトの照合シーケンスはBINARYです。