Mam poniższej tabeli w wersji MySQL 5.5.24MySQL 1062 - Powielanie pozycję „0” na klucz „pierwotna”
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;
Ma wiele danych z wielu do jednej relacji z pozostałych dwóch tabel z ondelete=restrict
i onupdate=restrict
.
Teraz potrzebuję zmienić strukturę i wprowadzić oddzielny klucz podstawowy w tabeli, zachowując jednocześnie istniejące relacje i dane. Za to, że wykonał następujące zapytanie:
ALTER TABLE `momento_distribution` ADD `id` INT(11) NOT NULL FIRST;
ALTER TABLE `momento_distribution` DROP PRIMARY KEY , ADD PRIMARY KEY ( `id`);
Niestety, moje drugie zapytanie nie powiodło się z powodu następującego błędu:
1062 - Duplicate entry '0' for key 'PRIMARY'
Może ktoś proszę zwrócić uwagę na problem? Myślę, że problemem jest istniejąca relacja, ale nie chcę stracić istniejącej relacji lub danych, która ma kilka tysięcy wierszy. Czy jest jakiś sposób, aby to zrobić bez utraty danych?
EDYCJA: Przeglądając dane, dostałem, że nowo utworzona kolumna ma w sobie wartość "0". Prawdopodobnie nie pozwala to na zmianę klucza głównego z powodu duplikatów rekordów (w nowym kluczu podstawowym)
Mam więcej niż 8000 wierszy, więc nie mogę zmienić tego ręcznie. Czy jest jakiś sposób przypisania rowid
do nowego klucza podstawowego?
Dzięki @Youthpark, próbuję tych zapytań i wracam za następne 10 minut. Dzięki za pomoc. Naprawdę jestem sfrustrowany tym problemem. –
W przypadku jakiegokolwiek problemu dołącz strukturę wszystkich tabel i kod błędu. –
Wreszcie zrobione. Utknąłem tam od wczoraj. Wielkie dzięki. –