sql >> データベース >  >> RDS >> Sqlserver

SQLServerで自動インクリメント主キーを定義する方法

    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 フィールドも一意の値であることが保証されています。


    1. MySQLのデータベースクエリ効率の最大化-パート2-

    2. MySQLで過去3か月の売上データを取得する方法

    3. MYsqlテーブルから一意のキーまたは主キーを削除するためのクエリ

    4. LEFTJOINを含む4つのテーブルを重複せずに結合します