MySQL traducido incorrectamente como: No se pueden agregar restricciones de clave externa para resolver.
El tipo de datos de la identificación de la tabla principal es int unsigned.
En cuanto a su subtabla, el tipo de datos hoyyb_id es int.
Porque:
INT[(M)][sin signo][relleno con ceros]
Un número entero de tamaño normal. El rango con signo es -2147483648 a 2147483647. El rango sin firmar es de 0 a 4294967295.
Dos soluciones
1. Cambiar el tipo de datos de la tabla principal a int.
2. Cambie el tipo de datos de la subtabla a int unsigned.
El siguiente es un ejemplo de simulación:
-Tabla principal, id es un entero sin signo.
mysql>Crear tabla test_main2(
->id INT unsigned NOT NULL,
->valor VARCHAR(10),
-> p>
-& gt; Clave principal (id)
-& gt;);
La consulta es normal, 0 filas están afectadas (0,01 segundos)
-Subtabla, el tipo de datos es int.
mysql>Crear tabla test_sub2(
->id INT no está vacío,
->main_id INT,
-> Valor VARCHAR(10),
->Clave principal (id),
->Restricción main_id_cons clave externa (main_id) se refiere a test_main2(id)
->);
Error 1005 (HY000): No se puede crear la tabla 'test.test_sub2' (Número de error: 150)
- Subtabla, cuando el tipo de datos es int sin firmar.
mysql>Crear tabla test_sub2(
->id INT no está vacío,
->main_id INT no está firmado,
- >Valor VARCHAR(10),
->Clave principal (id),
->Restricción main_id_cons clave externa (main_id) se refiere a test_main2(id)
-& gt;);
La consulta es normal, 0 filas están afectadas (0,02 segundos)