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

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

    問題:

    MySQLのテーブルの制約のデフォルト名を知りたい。

    例:

    データベースに、country およびstudent 、次の制約があります:PRIMARY KEY (テーブルの列ID country およびstudent )、FOREIGN KEY (列country_id テーブル内student )、DEFAULT (テーブル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(country_id) REFERENCES country(id)
    );
    

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

    SELECT TABLE_NAME, CONSTRAINT_TYPE, CONSTRAINT_NAME
    FROM information_schema.table_constraints
    WHERE table_name='country' OR table_name='student';
    

    結果は次のとおりです。

    TABLE_NAME CONSTRAINT_TYPE CONSTRAINT_NAME
    主キー プライマリ
    ユニーク 名前
    学生 主キー プライマリ
    学生 ユニーク personal_number
    学生 外部キー student_ibfk_1
    学生 チェック student_chk_1

    ディスカッション:

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

    PRIMARY KEY constraint 単にPRIMARYという名前です 、テーブルには常に1つの主キーがあるためです。 PRIMARYという名前の2つの制約があります 上記の結果では、それらが属するテーブルは異なります。

    FOREIGN KEYの場合 、名前は規則に従います:テーブル名、アンダースコア(‘_ ’)、‘ ibfk ’、別のアンダースコア(‘ _ ’)、および数値。この例では、student_ibfk_1です。 テーブル内student

    CHECKのデフォルト名 制約は外部キーの制約と似ています。テーブル名、アンダースコア(‘_)で始まります ’)、‘ chk ’、別のアンダースコア(‘ _ ’)、および数値。この例では、student_chk_1です。 テーブル内student

    UNIQUEのデフォルト名 制約は、列自体の名前です。この例では、personal_numberです。 テーブル内student UNIQUEの列が複数ある場合 制約の場合、制約の定義の最初の列の名前を使用します。


    1. SQL Server 2016:sys.dm_exec_function_stats

    2. Postgres pg_dumpは、毎回異なる順序でデータベースをダンプします

    3. 2つの既知の文字列から文字列を選択するSQLクエリ

    4. 特定のテーブルを使用するすべてのクエリを検索する