Aunque las otras respuestas son bastante útiles, solo quería compartir mi experiencia también.
Me enfrenté al problema cuando eliminé una tabla a la que id
ya se hacía referencia como clave externa en otras tablas ( con datos ) e intenté recrear / importar la tabla con algunas columnas adicionales.
La consulta de recreación (generada en phpMyAdmin) tenía el siguiente aspecto:
CREATE TABLE `the_table` (
`id` int(11) NOT NULL, /* No PRIMARY KEY index */
`name` varchar(255) NOT NULL,
`name_fa` varchar(255) NOT NULL,
`name_pa` varchar(255) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
... /* SOME DATA DUMP OPERATION */
ALTER TABLE `the_table`
ADD PRIMARY KEY (`id`), /* PRIMARY KEY INDEX */
ADD UNIQUE KEY `uk_acu_donor_name` (`name`);
Como puede observar, el PRIMARY KEY
índice se estableció después de la creación ( e inserción de datos ) que estaba causando el problema.
Solución
La solución fue agregar el PRIMARY KEY
índice en la consulta de definición de tabla para la id
que se hacía referencia como clave foránea, y también eliminarlo de la ALTER TABLE
parte donde se establecían los índices:
CREATE TABLE `the_table` (
`id` int(11) NOT NULL PRIMARY KEY, /* <<== PRIMARY KEY INDEX ON CREATION */
`name` varchar(255) NOT NULL,
`name_fa` varchar(255) NOT NULL,
`name_pa` varchar(255) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
table2.IDFromTable1
ytable1.ID
?