Mam tabeli, która ma poniżej definicji schematu:nie można zmienić klucza podstawowego powodu „nieprawidłowo utworzonego ograniczenie klucza obcego” błąd
CREATE TABLE `currency` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`code` char(3) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL,
`name` varchar(255) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL
PRIMARY KEY (`id`),
UNIQUE KEY `code_UNIQUE` (`code`)
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8;
Co chcę jest spadek kolumnę id
i uczynić code
jak nowa główny klucz. A niektóre inne tabele mają zagraniczne klucze do tego stołu. I próbował polecenia poniżej, ale nie powiodło się:
SET FOREIGN_KEY_CHECKS=0;
ALTER TABLE `currency` CHANGE COLUMN `id` `id` INT(11) NOT NULL, DROP PRIMARY KEY;
ALTER TABLE currency ADD PRIMARY KEY (code);
SET FOREIGN_KEY_CHECKS=1;
MySQL zgłasza wyjątek poniżej:
[błąd w zapytaniu 2] błąd na zmiany nazwy z './db/#sql-849_1' do'./db/currency '(errno: 150 - Ograniczenie klucza obcego jest niepoprawnie utworzone) Wykonanie zatrzymane!
To bardzo mi pomogło. Dzięki. +1 – Trying
W moim przypadku utworzyłem indeks 'unique', a następnie nie mogłem go upuścić. Najpierw musiałem utworzyć klucz "primary", a potem upuścić ten unikatowy. – Esamo