У меня есть следующая таблица в MySQL версии 5.5.24
DROP TABLE IF EXISTS `momento_distribution`;
CREATE TABLE IF NOT EXISTS `momento_distribution`
(
`momento_id` INT(11) NOT NULL,
`momento_idmember` INT(11) NOT NULL,
`created_at` DATETIME DEFAULT NULL,
`updated_at` DATETIME DEFAULT NULL,
`unread` TINYINT(1) DEFAULT '1',
`accepted` VARCHAR(10) NOT NULL DEFAULT 'pending',
`ext_member` VARCHAR(255) DEFAULT NULL,
PRIMARY KEY (`momento_id`, `momento_idmember`),
KEY `momento_distribution_FI_2` (`momento_idmember`),
KEY `accepted` (`accepted`, `ext_member`)
)
ENGINE=InnoDB
DEFAULT CHARSET=latin1;
Он имеет множество данных со многими-к-одному отношениями с двумя другими таблицами с ondelete=restrict
и onupdate=restrict
.
Теперь мне нужно изменить структуру и ввести отдельный первичный ключ в таблицу, сохраняя при этом существующие отношения и данные. Для этого я выполнил следующий запрос:
ALTER TABLE `momento_distribution` ADD `id` INT( 11 ) NOT NULL FIRST;
ALTER TABLE `momento_distribution` DROP PRIMARY KEY , ADD PRIMARY KEY ( `id` );
К сожалению, мой второй запрос завершился с ошибкой:
1062 - Дублирующая запись '0' для ключа 'PRIMARY'
Кто-нибудь может указать на проблему? Я предполагаю, что проблема заключается в существующем отношении, но я не хочу потерять существующее отношение или данные, которые имеют несколько тысяч строк. Есть ли способ сделать это без потери данных?
EDIT: При просмотре данных я понял, что только что созданный столбец имеет в нем значение "0". Вероятно, это не позволяет изменить основной ключ из-за дублирования записей (в новом Первичном ключе)
У меня более 8000 строк, поэтому я не могу изменить его вручную. Есть ли способ назначить rowid
новому Первичному ключу?