Chociaż inne odpowiedzi są dość pomocne, chciałem również podzielić się moim doświadczeniem.
Napotkałem problem, gdy usunąłem tabelę, do której id
odwoływałem się już jako klucz obcy w innych tabelach ( z danymi ) i próbowałem odtworzyć / zaimportować tabelę z kilkoma dodatkowymi kolumnami.
Zapytanie o odtworzenie (wygenerowane w phpMyAdmin) wyglądało następująco:
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`);
Jak możesz zauważyć, PRIMARY KEY
indeks został ustawiony po utworzeniu ( i wstawieniu danych ), które powodowało problem.
Rozwiązanie
Rozwiązaniem było dodanie PRIMARY KEY
indeksu w zapytaniu definiującym tabelę dla tego, do id
którego odwoływano się jako klucz obcy, jednocześnie usuwając go z ALTER TABLE
części, w której ustawiane były indeksy:
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
itable1.ID
?