Embora as outras respostas sejam bastante úteis, eu também queria compartilhar minha experiência.
Eu enfrentei o problema quando excluí uma tabela que idjá estava sendo referenciada como chave estrangeira em outras tabelas ( com dados ) e tentei recriar / importar a tabela com algumas colunas adicionais.
A consulta para recreação (gerada no phpMyAdmin) tinha a seguinte aparência:
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 você pode notar, o PRIMARY KEYíndice foi definido após a criação ( e inserção de dados ) que estava causando o problema.
Solução
A solução foi adicionar o PRIMARY KEYíndice na consulta de definição de tabela para a idqual estava sendo referenciada como chave estrangeira, além de removê-lo da ALTER TABLEparte em que os índices estavam sendo definidos:
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.IDFromTable1etable1.ID?