問題:
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 KEY 、UNIQUE 、および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の列が複数ある場合 制約の場合、制約の定義の最初の列の名前を使用します。