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

SQL Serverのデフォルトの制約名は何ですか?

    問題:

    SQLServerデータベースの制約のデフォルト名を知りたい。

    例:

    データベースに、country およびstudent 、次の制約があります:PRIMARY KEY (列id テーブル内country およびstudent )、FOREIGN KEY (列country_id テーブル内student )、DEFAULT (列name テーブル内student )、UNIQUE (列name テーブル内country および列personal_number テーブル内student )、およびCHECK (列age テーブル内student

    解決策:

    CREATE TABLE country (
    id int NOT NULL primary key,
    name varchar(100) UNIQUE
    );
    
    CREATE TABLE student (
    id int NOT NULL primary key,
    name varchar(100) NOT NULL DEFAULT 'unknown',
    personal_number varchar(100) UNIQUE,
    age int CHECK(age>15),
    country_id int FOREIGN KEY references country(id)
    );
    

    SQLServerがデフォルトでこれらのテーブルの制約にどのように名前を付けるかを表示してみましょう。このクエリを使用してそれらを確認します:

    SELECT TABLE_CATALOG, TABLE_NAME,
           CONSTRAINT_TYPE,CONSTRAINT_NAME
    FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS;
    

    結果は次のとおりです。

    TABLE_NAME CONSTRAINT_TYPE CONSTRAINT_NAME
    主キー PK__country__3213E83F7EFD826D
    ユニーク UQ__country__72E12F1BB69A1D8C
    学生 主キー PK__student__3213E83F357C7D1D
    学生 ユニーク UQ__student__24E2EDD2AC2A7D87
    学生 チェック CK__student__age__4E88ABD4
    学生 外部キー FK__student__country__4F7CD00D

    ディスカッション:

    テーブルを作成するときに、いくつかの列に制約を設定します。ただし、これらの制約の名前は指定していないため、デフォルトで名前が付けられています。制約のデフォルト名はどのように生成されますか?

    SQL Serverでは、デフォルトの制約名は特定のプレフィックスで始まります:PKUQCK 、またはFK

    PRIMARY KEYのデフォルト名 制約は「PK」で始まります ’の後に下線が続きます(‘ __ ’)、テーブル名、その他のアンダースコア(‘ __ ’)、およびSQLServerによって生成された16進数のシーケンス番号。この例では、PK__country__3213E83F7EFD826D テーブルcountry およびPK__student__3213E83F357C7D1D テーブルstudent

    FOREIGN KEYのデフォルト名 制約は「FK」で始まります ’の後に下線が続きます(‘ __ ’)、テーブル名、その他のアンダースコア(‘ __ ’)、関連するテーブルの名前、およびSQLServerによって生成された16進数のシーケンス番号。この例では、FK__student__country__4F7CD00D テーブルstudent これは、列idに相当します テーブル内country

    UNIQUEのデフォルト名 制約は「UQ」です ’、下線(‘ __ ’)、テーブル名、その他のアンダースコア(‘ __ ’)、およびSQLServerによって生成された16進数のシーケンス番号。この例では、UQ__country__72E12F1BB69A1D8C テーブルcountry 、およびUQ__student__24E2EDD2AC2A7D87 UNIQUEの テーブルの列名の制約studentUNIQUE 複数の列を持つ制約には、同様のパターンで名前が付けられます。

    CHECKのデフォルト名 制約は「CK」です ’、下線(‘ __ ’)、テーブル名、その他のアンダースコア(‘ __ ’)、列名、その他のアンダースコア(‘__’)、およびSQLServerによって生成された16進数のシーケンス番号。この例では、CK__student__age__4E88ABD4 CHECKのデフォルト名です 列ageの制約 テーブルのstudent


    1. Postgres-pggemの最後のバージョン0.14.0でエラーが発生する

    2. GroupByクエリに欠落している月を含める

    3. GTIDから従来のレプリケーションにロールバックする

    4. Oracleで改行文字を入力する方法は?