Este error es tan típico, que una vez que se ya has sufrido estos fallos, se intentan evitar teniendo un poco de cuidado al crear las tablas. Muchos ya lo conocéis y hay mil páginas…. pero he querido completarlo con algún detalle! Ahí van!
- Opción: Estás añadiendo una clave foránea cuyo tipo no coincide al tipo que hace referencia.
OJO! con INT(11) VS INT(10) : algunas herramientas que hacen de interfaz de bases de datos crean PRIMARY_KEY como INT(11) y el resto de campos de tipo numérico como INT(10).
OJO! con UNSIGNED. Si recibes código heredado y te estás volviendo loco puede que esté indicado como UNSIGNED.
OJO! que la clave foránea sea pueda ser NULL, no influye. Ejemplo:
`modified_by` INT(11) NULL DEFAULT NULL.
- Opción: Estás añadiendo una clave foránea y el campo al que estás haciendo referencia no existe con ese valor.
Es decir. Imaginemos que a la clave ‘modified_by’ lo tienes inicializado a 5. Te has dado cuenta que has añadido el campo, pero no has añadido la propiedad de que es una foreing key a la tabla de usuarios! Si luego al poner que modified_by es fk te sale este error, comprueba que el usuario 5 existe en la tabla de usuarios.
OJO! Cuando modifiques una tabla con un campo existente ‘modified_by’ que es nulo y pongas que la foreing key no puede ser nulo. Ejemplo:
`modified_by` INT(11) NOT NULL.
No te va a dejar modificar la tabla a no ser de que le pongas un valor inicializado y que sea correcto. Tendrás que actualizar el campo modified_by por un valor correcto y luego crear la tabla. (el mismo caso que antes, pero ahora con NULL).
- Opción: Si pones “On Delete Set Null” pero el campo está definido como NOT NULL.
OJO! Te contradices más que el programa electoral de Rajoy!