この記事には、基本的なSQL CREATE TABLE
が含まれています 初心者がデータベースプロジェクトの基本的なテーブルを作成するために使用できるステートメント。
基本構文
SQLでテーブルを作成するための基本的な構文は、次のようになります。
CREATE TABLE TableName (
Column1 datatype optional_constraints,
Column2 datatype optional_constraints,
Column3 datatype optional_constraints,
...
);
場所:
-
TableName
テーブルに付けたい名前です -
Column1
、などは列に付ける名前です datatype
各列に割り当てるデータ型です。ほとんどのRDBMSでは、各列にデータ型を割り当てる必要があります。 SQLiteでは、これはオプションです。-
optional_constraints
は、列に対して適用する制約のオプションのリストです。
ほとんどのDBMSはこれよりも複雑な構文を使用します(つまり、より多くのオプションを提供します)が、これは通常、テーブルを作成するために必要な基本的な構文です。ほとんどの初心者はこの構文から始めて、進歩するにつれてより高度なオプションを学びます。
基本的な例
基本的な例は次のとおりです。
CREATE TABLE Pets
(
PetId int NOT NULL PRIMARY KEY,
PetTypeId int NOT NULL,
OwnerId int NOT NULL,
PetName varchar(60) NOT NULL,
DOB date NULL
);
注意すべき点は次のとおりです。
- テーブル名と列名はどのような場合でもかまいません。たとえば、
PetId
の代わりに 私はそれをpetid
と呼ぶことができました 、PETID
、またはpet_id
。一部のDBMS(Postgresなど)は、テーブルとその列名をクエリするときに大文字と小文字を区別しますが、そうでないもの(SQL Serverなど)もあります。 - 一部のDBMSは、データ型に異なる名前を使用します。
-
NOT NULL
この列に値を含める必要があることを指定するテーブル制約です(つまり、NULL
を含めることはできません 値)。 -
NULL
列にNULL
を含めることができることを意味します 値。一部のDBMS(DB2など)はNULL
をサポートしていません キーワードであるため、このようなDBMSを使用する場合は省略してください。 PRIMARY KEY
テーブルに主キー制約を追加します。すべてのテーブルで主キーを指定することをお勧めします。- 同じ名前のテーブルがデータベースにすでに存在する場合、エラーが発生します。既存のテーブルを削除するか、変更する(または作成するテーブルの名前を変更する)必要があります。
外部キーを使用してテーブルを作成する
次の例では、2つの外部キーを持つテーブルを作成します。外部キーは、2つのテーブル間の関係を作成するために使用されます。
CREATE TABLE Pets
(
PetId int NOT NULL PRIMARY KEY,
PetTypeId int NOT NULL REFERENCES PetTypes (PetTypeId),
OwnerId int NOT NULL REFERENCES Owners (OwnerId),
PetName varchar(60) NOT NULL,
DOB date NULL
);
REFERENCES
句は、2つの列に対する外部キーを定義するために使用されます。私たちの場合、外部キーは以下を強制します:
-
Pets.PetTypeId
列はPetTypes.PetTypeId
を参照します 列(Pets.PetTypeId
に入る任意の値 列のPetTypes.PetTypeId
に一致する値が含まれている必要があります 列)。 -
Pets.OwnerId
列はOwners.OwnerId
を参照します 列(Pets.OwnerId
に入る任意の値 列のOwners.OwnerId
に一致する値が含まれている必要があります 列)。
ALTER TABLE
を使用して、外部キーを後で追加することもできます。 必要に応じてステートメント。
デフォルトの制約を使用してテーブルを作成する
次の例では、DEFAULT
を使用してテーブルを作成します 制約。
CREATE TABLE OrderItems
(
OrderId int NOT NULL PRIMARY KEY,
OrderItem int NOT NULL,
ProductId int NOT NULL,
Quantity int NOT NULL DEFAULT 1,
ItemPrice decimal(8,2) NOT NULL
);
タイムスタンプ列を含むテーブルを作成する
DEFAULT
を使用できます 新しい行が挿入されるたびに現在の日付と時刻を列に自動的に挿入するための制約。これは、タイムスタンプの挿入と呼ばれることがよくあります。
異なるDBMSは、異なる関数を使用して現在の日付を返します。
これはSQLServerでそれを行う例です。
CREATE TABLE Users
(
UserId int NOT NULL PRIMARY KEY,
FirstName varchar(60) NOT NULL,
LastName varchar(60) NOT NULL,
DateInserted datetime DEFAULT CURRENT_TIMESTAMP
);
SQL Serverでは、CURRENT_TIMESTAMP
GETDATE()
に相当するANSIです 機能。
または、SYSDATETIME()
を使用することもできます より高精度のタイムスタンプの場合:
CREATE TABLE Users
(
UserId int NOT NULL PRIMARY KEY,
FirstName varchar(60) NOT NULL,
LastName varchar(60) NOT NULL,
DateInserted datetime2 DEFAULT SYSDATETIME()
);
より高い精度をサポートするには、列のデータ型が datetime2である必要があります 。
SQL Serverには、日付/時刻値のデータ型がかなりあります。リストについては、SQLServerの日付と時刻の関数を参照してください。
各DBMSには、日付と時刻を返すための独自の関数があります。主なもののリストは次のとおりです:
DB2 | CURRENT_DATE |
MySQL | CURRENT_DATE またはNOW() |
Oracle | SYSDATE |
PostgreSQL | CURRENT_DATE |
SQL Server | CURRENT_TIMESTAMP 、GETDATE() またはSYSDATETIME() |
SQLite | datetime('now') |
参照:
- SQLServerの日付と時刻の関数
- SQLiteの日付と時刻の関数
値が自動的に増加する列を作成する
新しい行が挿入されるたびに値を自動的にインクリメントする列を作成する必要がある場合があります。これらは通常、使用されているDBMSに応じて、「自動インクリメント」または「ID」列と呼ばれます。
SQL Serverでは、IDENTITY
を使用します 引数:
CREATE TABLE Users
(
UserId int NOT NULL IDENTITY(1,1) PRIMARY KEY,
FirstName varchar(60) NOT NULL,
LastName varchar(60) NOT NULL,
DateInserted datetime2 DEFAULT SYSDATETIME()
);
この場合、IDENTITY(1,1)
を使用します 。
- 最初の
1
シードです。これは、カウントを開始する値を指定します(つまり、これはテーブルに挿入された最初の行の値です)。 - 2番目の
1
増分です。これは、ロードされた前の行のID値に追加された増分値です。
各DBMSには、自動インクリメント列を作成するための独自のキーワードがあります。
- MySQLとMariaDbでは、
AUTO_INCREMENT
を使用します - SQLiteには、いくつかのオプションがあります(
AUTOINCREMENT
を含む) キーワード) - PostgreSQLでは、
SERIAL
を使用します - OracleDatabase12からc 、IDENTITYキーワードを使用して、自動インクリメント列を作成できるようになりました。例は次のようになります。
UserId NUMBER GENERATED BY DEFAULT ON NULL AS IDENTITY
詳細オプション
ほとんどのDBMSでは、テーブルを作成するときに詳細オプションを指定できます。使用可能なオプションは、DBMSによって大きく異なります。
この記事で指定されていないオプションが必要な場合は、DBMSのドキュメントを参照してください。
多くの高度なオプションは、GUIを介して設定できます(データベースへの接続に使用するツールによって異なります)。 GUIを介していつでもテーブルを作成または変更し、その「Script as Create」(または同様の)オプションを使用して、そのようなテーブルを作成するために実行する必要のあるSQLコードを確認できます。このコードを使用して、テーブル名や列名などを変更し、前のテーブルの定義に基づいてまったく新しいテーブルを作成できます。