Embora as outras respostas sejam bastante úteis, eu também queria compartilhar minha experiência.
Eu enfrentei o problema quando excluí uma tabela que id
já 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 id
qual estava sendo referenciada como chave estrangeira, além de removê-lo da ALTER TABLE
parte 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.IDFromTable1
etable1.ID
?