Problema:
Desea conocer los nombres predeterminados de las restricciones en una tabla en MySQL.
Ejemplo:
En nuestra base de datos, creamos dos tablas, country
y student
, con las siguientes restricciones:PRIMARY KEY
(el id de la columna en las tablas country
y student
), FOREIGN KEY
(la columna country_id
en la tabla student
), DEFAULT
(el nombre de la columna en la tabla student
), UNIQUE
(la columna name
en la tabla country
y la columna personal_number
en la tabla student
), y CHECK
(la columna age
en la tabla student
).
Solución:
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) );
Veamos cómo MySQL nombra las restricciones de estas tablas de forma predeterminada. Usa esta consulta para verlos:
SELECT TABLE_NAME, CONSTRAINT_TYPE, CONSTRAINT_NAME FROM information_schema.table_constraints WHERE table_name='country' OR table_name='student';
Aquí está el resultado:
NOMBRE_TABLA | CONSTRAINT_TYPE | CONSTRAINT_NAME |
---|---|---|
país | CLAVE PRINCIPAL | PRIMARIO |
país | ÚNICO | nombre |
estudiante | CLAVE PRINCIPAL | PRIMARIO |
estudiante | ÚNICO | número_personal |
estudiante | LLAVE EXTRANJERA | estudiante_ibfk_1 |
estudiante | COMPROBAR | student_chk_1 |
Discusión:
Cuando creamos nuestras tablas, establecemos restricciones para algunas columnas. Sin embargo, no especificamos los nombres de estas restricciones, por lo que se nombran de forma predeterminada en MySQL. En MySQL, los tipos de restricciones predeterminados son PRIMARY KEY
, FOREIGN KEY
, UNIQUE
y CHECK
. ¿Cómo se generan los nombres predeterminados para las restricciones?
La PRIMARY KEY constraint
simplemente se llama PRIMARY
, porque siempre hay una clave principal en una tabla. Hay dos restricciones llamadas PRIMARY
en el resultado anterior, pero las tablas a las que pertenecen son diferentes.
Para FOREIGN KEY
, el nombre sigue la convención:el nombre de la tabla, un guión bajo (‘_
'), 'ibfk
', otro guión bajo ('_
'), y un número. Para nuestro ejemplo, es student_ibfk_1
en la tabla student
.
El nombre predeterminado para un CHECK
La restricción es similar a la de la clave foránea. Comienza con el nombre de la tabla, un guión bajo (‘_
’), ‘chk
', otro guión bajo ('
_
'), y un número. Para nuestro ejemplo, es student_chk_1
en la tabla student
.
El nombre predeterminado de un UNIQUE
la restricción es el nombre de la columna en sí. Para nuestro ejemplo, es personal_number
en la tabla student
. Cuando hay varias columnas con el UNIQUE
restricción, utiliza el nombre de la primera columna en la definición de la restricción.