MySQL、PostgreSQL、Oracle、およびその他の多くのリレーショナルデータベースと同様に、SQL Serverは、ほとんどのデータベーステーブルに一意の主キーを割り当てる場合に最適に利用されます。
数値の自動インクリメントされた主キーを使用する利点は多数ありますが、最も影響力のある利点は、クエリを実行する際の速度の高速化と、テーブルの他の場所で頻繁に変更されるデータを含む可能性のある数千のレコードを検索する際のデータ非依存性です。一貫性のある一意の数値識別子を使用すると、アプリケーションはこれらのより高速で信頼性の高いクエリを利用できます。
SQL Serverに接続したら、通常はCREATING
から始めます。 インクリメントされた主キーとして使用するフィールドを含む新しいテーブル。この例では、実証済みのid
を使用します。 フィールド:
CREATE TABLE books (
id INT NOT NULL,
title VARCHAR(100) NOT NULL,
primary_author VARCHAR(100),
);
ここでの問題は、id
を制御する方法がないことです。 分野。新しいレコードが挿入されるとき、id
の値を手動で入力する必要があるだけではありません 、ただし、id
を確認するために、事前にクエリを実行する必要があります 値はまだ存在していません(多数の同時接続を処理する場合はほとんど不可能です)。
IDと主キー制約の使用
このソリューションは、SQLServerが提供する2つの制約オプションを使用していることがわかりました。
1つ目はPRIMARY KEY
、名前が示すように、指定された列をテーブルの完全に一意のインデックスとして動作させ、迅速な検索とクエリを可能にします。
SQLServerでは1つのPRIMARY KEY
しか使用できませんが 単一のテーブルに割り当てられた制約、そのPRIMARY KEY
複数の列に対して定義できます。複数列のシナリオでは、個々の列に重複する一意でない値を含めることができますが、PRIMARY KEY
制約により、すべての組み合わせ 制約された値の数は、実際には他のすべての組み合わせに対して一意になります。
パズルの2番目のピースは、IDENTITY
です。 制約。これは、新しいレコードがINSERTED
になるたびに、指定された列内の数値を自動的にインクリメントするようにSQLServerに通知します。 。 IDENTITY
できます 数値のseed
の2つの引数を受け入れます 値はincrement
と同様に開始されます 、これらの値は通常、IDENTITY
では指定されません 制約と代わりにデフォルトのままにします(両方ともデフォルトで1
。
この新しい知識をすぐに利用できるので、以前のCREATE TABLE
を書き直すことができます。 2つの新しい制約を追加してステートメントを作成します。
CREATE TABLE books (
id INT NOT NULL IDENTITY PRIMARY KEY,
title VARCHAR(100) NOT NULL,
primary_author VARCHAR(100),
);
これですべてです。ここで、id
books
の列 テーブルはINSERT
ごとに自動的にインクリメントされます およびid
フィールドも一意の値であることが保証されています。