Хотя другие ответы весьма полезны, просто хотел бы поделиться своим опытом.
Я столкнулся с проблемой, когда удалил таблицу, чья id
уже упоминалась как внешний ключ в других таблицах ( с данными ), и попытался воссоздать / импортировать таблицу с дополнительными столбцами.
Запрос на воссоздание (сгенерированный в phpMyAdmin) выглядел следующим образом:
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`);
Как вы можете заметить, индекс PRIMARY KEY
был установлен после создания ( и вставки данных ), которое вызывало проблему.
Решение
Решением было добавить индекс PRIMARY KEY
в запрос определения таблицы для id
, на который ссылался как на внешний ключ, а также удалить его из части ALTER TABLE
, где устанавливались индексы:
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;