Bien que les autres réponses soient très utiles, je voulais simplement partager mon expérience également.
J'ai rencontré le problème lorsque j'ai supprimé une table dont la idréférence était déjà en tant que clé étrangère dans d'autres tables ( avec des données ) et essayé de recréer / importer la table avec des colonnes supplémentaires.
La requête de récréation (générée dans phpMyAdmin) ressemblait à ceci:
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`);
Comme vous pouvez le remarquer, l' PRIMARY KEYindex a été défini après la création ( et l'insertion des données ) qui causait le problème.
Solution
La solution consistait à ajouter l' PRIMARY KEYindex sur la requête de définition de table pour le idqui était référencé en tant que clé étrangère, tout en le supprimant également de la ALTER TABLEpartie où les index étaient définis:
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.IDFromTable1ettable1.ID?