¿Cómo arreglar MySQL no puede agregar un error de restricción de clave externa?

Publicado: 2022-12-22

¿Cómo soluciona el error " MySQL no puede agregar una restricción de clave externa "? Es posible que reciba el siguiente mensaje de error al intentar agregar una restricción de clave externa a una tabla MySQL: " ERROR 1215 (HY000): No se puede agregar la restricción de clave externa ".

Un error como este es muy general y no proporciona detalles específicos sobre la razón específica por la que MySQL no puede insertar una restricción de clave externa en una tabla. Para resolver este problema, deberá identificar la causa exacta del problema.

Este artículo explicará el motivo del error “#1215 – No se puede agregar la restricción de clave externa” de MySQL, cómo encontrar el motivo y cómo solucionarlo con cuatro métodos efectivos.

¿Cómo arreglar MySQL no puede agregar un error de restricción de clave externa?

¿Cuál es el motivo del error "# 1215 - No se puede agregar la restricción de clave externa" de MySQL?

Este error puede tener una variedad de causas. Para determinar la causa de este error, es mejor examinar la sección ÚLTIMO ERROR DE CLAVE EXTERNA de MOSTRAR ESTADO INNODB DEL MOTOR.

De esta manera, obtendrá una mejor comprensión del problema. Podrá identificar su caso de la siguiente lista:

Por lo general, al cargar volcados, la tabla o el índice al que se refiere la restricción no existe.

A veces, la tabla de la base de datos que los clientes desean agregar restricciones no existe, lo que genera un mensaje de error 1215.

Sin embargo, no hay ninguna indicación de que la tabla no exista, por lo que se recomienda utilizar el comando para determinar qué tablas están disponibles en la base de datos.

Ejecute SHOW TABLES o SHOW CREATE TABLE en cada una de las tablas principales. Cualquier tabla que devuelva un error 1146 indica que las tablas se han creado en el orden incorrecto.

La solución es ejecutar CREATE TABLE que falta e intentarlo de nuevo o deshabilitar temporalmente las comprobaciones de clave externa. Es fundamental realizar este paso durante las restauraciones de respaldo en las que pueden estar presentes referencias circulares.

Ejecute el siguiente código para corregir el error:

 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS; SET FOREIGN_KEY_CHECKS=0; SOURCE /backups/mydump.sql; -- restore your backup within THIS session SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS;

Tablas o índices en las comillas de uso indebido de referencia de restricción

Si desea diagnosticar este error, inspeccione cada declaración FOREIGN KEY y asegúrese de que no haya comillas alrededor de los calificadores de objetos o que haya comillas alrededor de la tabla y un par alrededor de cada nombre de columna.

Esto se puede resolver no citando nada o citando la tabla y la columna por separado.

La clave local, la tabla externa o la columna en las referencias de restricción tienen un error tipográfico

Es posible diagnosticar este error ejecutando SHOW TABLES y SHOW COLUMNS y comparando las cadenas con las especificadas en su declaración de REFERENCIAS. El error tipográfico debe corregirse tan pronto como se descubra.

La columna a la que se refiere la restricción no es del mismo tipo o ancho que la columna externa

Para el diagnóstico, use el padre SHOW CREATE TABLE para asegurarse de que la columna local y la columna a la que se hace referencia contengan el mismo tipo de datos y ancho.

El problema se puede resolver editando su declaración DDL para asegurarse de que la definición de columna en la tabla secundaria coincida con la de la tabla principal.

El objeto extraño no es una LLAVE de ningún tipo.

Para diagnosticar este problema, utilice el padre SHOW CREATE TABLE para examinar la parte REFERENCES de la tabla y asegurarse de que la columna que apunta a ella no esté indexada.

Solucione el problema haciendo que la columna sea CLAVE, CLAVE ÚNICA o CLAVE PRINCIPAL.

La clave externa es una PK o UK de varias columnas, donde la columna a la que se hace referencia no es la más a la izquierda

Para diagnosticar este error, ejecute el comando principal SHOW CREATE TABLE para determinar si la parte REFERENCIAS apunta a una columna que está presente en algunos índices de varias columnas pero que no es la más a la izquierda en su definición.

Puede solucionar el problema agregando un índice a la tabla principal donde la columna a la que se hace referencia es la columna más a la izquierda o la única.

Diferentes conjuntos de caracteres/intercalaciones entre las dos tablas/columnas

Para diagnosticar el problema, ejecute SHOW CREATE TABLE parent y verifique que las partes CHARACTER SET y COLLATE de la columna secundaria coincidan con las de la tabla principal.

Para solucionar esto, asegúrese de que el DDL de la tabla secundaria coincida con el juego de caracteres y la intercalación de su tabla/columna principal, o ALTERE la tabla principal para que su definición coincida con la definición de la secundaria.

La tabla principal no usa InnoDB

El problema se puede diagnosticar ejecutando SHOW CREATE TABLE parent y comprobando ENGINE=INNODB.

ALTERE la tabla principal para cambiar de MySQL a InnoDB para resolver este problema.

¿Cómo encontrar el motivo del error "No se puede agregar la restricción de clave externa"?

Este error no indica el motivo específico de la incapacidad de MySQL para implementar una restricción de clave externa en la tabla, que es muy general.

Para ayudar a resolver este problema, deberá identificar la causa exacta. Puede hacer esto ejecutando la siguiente consulta en su cliente MySQL:

 SHOW ENGINE INNODB STATUS;

Se deben devolver tres campos de esta consulta: Tipo, Nombre y Estado. El ÚLTIMO ERROR DE CLAVE EXTERNA se puede identificar expandiendo la columna de estado del resultado.

Esta sección tiene como objetivo identificar por qué falló la última consulta de modificación para que pueda solucionar el problema.

Por lo general, hay una falta de coincidencia entre el tipo de columnas en la tabla principal y la tabla externa como causa de este problema.

El problema también puede deberse a una falta de coincidencia entre los tipos de motor de dos tablas, como MyISAM e InnoDB.

También es posible debido a las diferentes intercalaciones entre las tablas, una usando UTF-8 y la otra usando latin1.

Debes prestar atención a los siguientes factores:

Motor : Cada tabla debe configurarse con el mismo motor de base de datos, por ejemplo, InnoDB.

Tipo de datos : en una tabla, ambas columnas deben tener el mismo tipo de datatype. int(11) datatype. int(11) “, mientras que, en otro, smallint(5) causará un problema.

Intercalación : para garantizar la compatibilidad, los conjuntos de caracteres de ambas columnas deben ser iguales, por ejemplo, UTF8.

Cuidado : las columnas aún podrían tener una diferente, incluso si sus tablas tienen la misma intercalación.

Único : las claves foráneas deben hacer referencia a campos únicos en la tabla de referencia, generalmente los principales.

Ungisned : es posible que una tabla tenga claves sin firmar y otra no tenga claves sin firmar.

¿Cómo reparar el error MySQL "# 1215 - No se puede agregar una restricción de clave externa" (4 métodos)?

Habiendo discutido las diferentes causas de este mensaje de error, hemos pasado al siguiente paso. Este error debe corregirse, así que veamos cómo hacerlo con cuatro métodos efectivos.

Método 1: comprobar la disponibilidad de la mesa

Para comenzar a solucionar el error, puede verificar si la tabla existe ejecutando el siguiente comando:

 show tables;

Es evidente a partir de este código que la restricción podría crearse ya que la tabla estaba disponible.

Método 2: asegúrese de que la tabla principal esté usando InnoDB

Se podría llevar a cabo una mayor investigación comprobando el conjunto del motor de almacenamiento en la tabla de la base de datos. El siguiente comando se puede utilizar para hacerlo:

 SHOW CREATE TABLE parent

El resultado es que encontrará que InnoDB no es el motor de almacenamiento. Como se configuró ENGINE=MYISAM, puede cambiar el motor de almacenamiento ejecutando el siguiente comando:

 ALTER TABLE parent ENGINE=INNODB;

Finalmente es posible corregir el error con este método.

Método 3: compruebe si hay citas inapropiadas

Para cada declaración de FOREIGN KEY, asegúrese de que no se inserten comillas alrededor de los calificadores de objetos o que las comillas separadas rodeen los nombres de las tablas y columnas.

Con este método, es necesario no citar nada o citar la columna y la tabla por separado para corregir el error.

Método 4: verificar si la clave existe o no

Al ingresar comandos MySQL, es necesario asegurarse de que se ingrese el comando correcto. La verificación cruzada garantiza que el cliente no haga referencia a una clave de tabla inexistente en la tabla de destino.

Por lo tanto, es necesario corregir a los clientes sobre cómo usar la llave en la mesa. Es posible que la columna en uso para ON DELETE SET NULL no tenga una definición nula en algunos casos.

Para evitar el error 1215 de MySQL, debe asegurarse de que la columna esté establecida en el valor nulo predeterminado.

Conclusión

Este artículo ha explicado el motivo del error “#1215 – No se puede agregar la restricción de clave externa” de MySQL, cómo encontrar la causa y cómo solucionarlo con cuatro métodos efectivos.

Gracias por tomarse el tiempo para revisar este artículo. Es un placer presentárselo. En la sección de comentarios, publique cualquier pregunta o comentario.

Por favor, siga nuestras páginas de Facebook y Twitter si desea mantenerse actualizado sobre las últimas noticias.