Хоча інші відповіді дуже корисні, я просто хотів поділитися своїм досвідом.
Я зіткнувся з проблемою, коли я видалив таблицю, на 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;
table2.IDFromTable1
іtable1.ID
?