Although the other answers are quite helpful, just wanted to share my experience as well.
I faced the issue when I had deleted a table whose id
was already being referenced as foreign key in other tables (with data) and tried to recreate/import the table with some additional columns.
The query for recreation (generated in phpMyAdmin) looked like the following:
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`);
As you may notice, the PRIMARY KEY
index was set after the creation (and insertion of data) which was causing the problem.
Solution
The solution was to add the PRIMARY KEY
index on table definition query for the id
which was being referenced as foreign key, while also removing it from the ALTER TABLE
part where indexes were being set:
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;