Solución:
Supongo que Clients.Case_Number
y / o Staff.Emp_ID
no son exactamente del mismo tipo de datos que Clients_has_Staff.Clients_Case_Number
y Clients_has_Staff.Staff_Emp_ID
.
Quizás las columnas de las tablas principales son INT UNSIGNED
?
Deben ser exactamente el mismo tipo de datos en ambas tablas.
Razones por las que puede obtener un error de restricción de clave externa:
- No está utilizando InnoDB como motor en todas las tablas.
- Está intentando hacer referencia a una clave inexistente en la tabla de destino. Asegúrate de que sea un llave en la otra tabla (puede ser una clave principal o única, o simplemente una
key
) - Los tipos de columnas no son los mismos (la excepción es que la columna en la tabla de referencia puede ser anulable incluso si no es anulable en la tabla referenciada).
- Si PK / FK es un varchar, asegúrese de que la intercalación sea la misma para ambos.
Actualizar:
- Una de las razones también puede ser que la columna que está utilizando para
ON DELETE SET NULL
no está definido como nulo. Así que asegúrese de que la columna esté configurada como nula por defecto.
Compruebe estos.
Para otros, es posible que el mismo error no siempre se deba a una falta de coincidencia del tipo de columna, puede encontrar más información sobre un error de clave foriegn de mysql emitiendo el comando
SHOW ENGINE INNODB STATUS;
puede encontrar un error cerca de la parte superior del mensaje impreso, algo como
No se puede encontrar un índice en la tabla a la que se hace referencia donde las columnas a las que se hace referencia aparecen como las primeras columnas, o los tipos de columna en la tabla y la tabla a la que se hace referencia no coinciden con la restricción.