Problema:
Você deseja saber os nomes padrão das restrições em uma tabela no MySQL.
Exemplo:
Em nosso banco de dados, criamos duas tabelas,
country
e student
, com as seguintes restrições:PRIMARY KEY
(o ID da coluna nas tabelas country
e student
), FOREIGN KEY
(a coluna country_id
na tabela student
), DEFAULT
(o nome da coluna na tabela student
), UNIQUE
(a coluna name
na tabela country
e a coluna personal_number
na tabela student
) e CHECK
(a coluna age
na tabela student
). Solução:
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) );
Vamos mostrar como o MySQL nomeia as restrições dessas tabelas por padrão. Use esta consulta para vê-los:
SELECT TABLE_NAME, CONSTRAINT_TYPE, CONSTRAINT_NAME FROM information_schema.table_constraints WHERE table_name='country' OR table_name='student';
Aqui está o resultado:
TABLE_NAME | CONSTRAINT_TYPE | CONSTRAINT_NAME |
---|---|---|
país | CHAVE PRIMÁRIA | PRIMÁRIO |
país | ÚNICO | nome |
aluno | CHAVE PRIMÁRIA | PRIMÁRIO |
aluno | ÚNICO | número_pessoal |
aluno | CHAVE ESTRANGEIRA | student_ibfk_1 |
aluno | VERIFICAR | aluno_chk_1 |
Discussão:
Quando criamos nossas tabelas, definimos restrições para algumas colunas. No entanto, não especificamos os nomes para essas restrições, então elas são nomeadas por padrão no MySQL. No MySQL, os tipos de restrição padrão são
PRIMARY KEY
, FOREIGN KEY
, UNIQUE
e CHECK
. Como os nomes padrão são gerados para restrições? A
PRIMARY KEY constraint
é simplesmente chamado de PRIMARY
, porque sempre há uma chave primária em uma tabela. Existem duas restrições chamadas PRIMARY
no resultado acima, mas as tabelas a que pertencem são diferentes. Para
FOREIGN KEY
, o nome segue a convenção:o nome da tabela, um sublinhado (‘_
’), ‘ibfk
’, outro sublinhado (‘_
’), e um número. Para nosso exemplo, é student_ibfk_1
na tabela student
. O nome padrão para um
CHECK
restrição é semelhante à da chave estrangeira. Começa com o nome da tabela, um sublinhado (‘_
’), ‘chk
’, outro sublinhado (‘_
’), e um número. Para nosso exemplo, é student_chk_1
na tabela student
. O nome padrão de um
UNIQUE
restrição é o nome da própria coluna. Para nosso exemplo, é personal_number
na tabela student
. Quando houver várias colunas com o UNIQUE
restrição, ele usa o nome da primeira coluna na definição da restrição.