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