Изменение первичного ключа таблицы, который имеет ограничения внешнего ключа в mysql

У меня есть база данных mysql, в которой есть множество таблиц. Одна таблица имеет составной ключ в качестве первичного ключа и один внешний ключ. Ниже приведены определения таблиц.

CREATE TABLE IF NOT EXISTS `ohrm_emp_education` (
  `emp_number` int(11) NOT NULL,
  `education_id` int(11) NOT NULL,
  `institute` varchar(100) DEFAULT NULL,
  `major` varchar(100) DEFAULT NULL,
  `year` decimal(4,0) DEFAULT NULL,
  `score` varchar(25) DEFAULT NULL,
  `start_date` date DEFAULT NULL,
  `end_date` date DEFAULT NULL,
  PRIMARY KEY (`emp_number`,`education_id`),
  KEY `education_id` (`education_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;



ALTER TABLE `ohrm_emp_education`
ADD CONSTRAINT `ohrm_emp_education_ibfk_1` FOREIGN KEY (`emp_number`) REFERENCES `hs_hr_employee` (`emp_number`) ON DELETE CASCADE,
ADD CONSTRAINT `ohrm_emp_education_ibfk_2` FOREIGN KEY (`education_id`) REFERENCES `ohrm_education` (`id`) ON DELETE CASCADE;

Но теперь мне нужно добавить новый столбец в эту существующую таблицу и сделать его первичным ключом. Я попробовал это с помощью следующего запроса.

ALTER TABLE ohrm_emp_education
ADD column id int not null AUTO_INCREMENT,
DROP PRIMARY KEY,
ADD primary key (id) 

Но это показывает следующую ошибку

#1025 - Error on rename of './test/#sql-4f6_19b' to './test/ohrm_emp_education' (errno: 150)

Я попытался с несколькими ответами, которые найдены в Интернете, но не мог решить это должным образом. Может ли кто-нибудь помочь мне в этом. Заранее спасибо.

4 ответа

Решение

Попробуйте сначала удалить внешние ключи, примерно так:

ALTER TABLE `ohrm_emp_education` DROP FOREIGN KEY `emp_number`;
ALTER TABLE `ohrm_emp_education` DROP FOREIGN KEY `education_id`;

А потом переделать таблицу.

Если вы используете SQL Server Management Studio.
Затем щелкните правой кнопкой мыши на столе и выберите дизайн. Затем щелкните правой кнопкой мыши строку, содержащую составной ключ, и нажмите "Удалить первичный ключ", затем добавьте новый столбец и вставьте данные в этот столбец и убедитесь, что в столбце нет пустых данных.

Затем снова перейдите в представление конструктора, щелкните правой кнопкой мыши нужный столбец и выберите "Установить в качестве первичного ключа".

Вы сделали!!

Обычно вы получаете эту ошибку, если ваши таблицы используют движок InnoDB. В этом случае вам придется удалить внешний ключ, а затем выполнить изменение таблицы и удалить столбец.

Удалить / отключить ограничение внешнего ключа. Удалите первичный ключ, добавьте новый PK, включите / добавьте fk.

Другие вопросы по тегам