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 idya 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 idque se hacía referencia como clave foránea, y también eliminarlo de la ALTER TABLEparte 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.IDFromTable1ytable1.ID?