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.