Я использую MySQL, и у меня есть таблица с индексом, который используется в качестве внешнего ключа во многих других таблицах. Я хочу изменить тип данных индекса (с целого числа без знака), как лучше всего это сделать?
Я попытался изменить тип данных в поле индекса, но это не удалось, поскольку он используется в качестве внешнего ключа для других таблиц. Я попытался изменить тип данных на одном из внешних ключей, но это не удалось, поскольку он не соответствовал типу данных индекса.
Я полагаю, что я мог бы вручную отбросить все ограничения внешнего ключа, изменить типы данных и добавить ограничения обратно, но это было бы большой работой, потому что у меня много таблиц, использующих этот индекс в качестве внешнего ключа. Есть ли способ временно отключить ограничения внешнего ключа при внесении изменений? Кроме того, есть ли способ получить список всех полей, ссылающихся на индекс как внешний ключ?
Обновление:
Я попытался изменить один внешний ключ после отключения проверок внешнего ключа, но, похоже, он не отключает проверки:
SET foreign_key_checks = 0;
ALTER TABLE `escolaterrafir`.`t23_aluno` MODIFY COLUMN `a21_saida_id` INTEGER DEFAULT NULL;
Вот ошибка:
------------------------
LATEST FOREIGN KEY ERROR
------------------------
090506 11:57:34 Error in foreign key constraint of table escolaterrafir/t23_aluno:
there is no index in the table which would contain
the columns as the first columns, or the data types in the
table do not match to the ones in the referenced table
or one of the ON ... SET NULL columns is declared NOT NULL. Constraint:
,
CONSTRAINT FK_t23_aluno_8 FOREIGN KEY (a21_saida_id) REFERENCES t21_turma (A21_ID)
Определение индексной таблицы:
DROP TABLE IF EXISTS `escolaterrafir`.`t21_turma`;
CREATE TABLE `escolaterrafir`.`t21_turma` (
`A21_ID` int(10) unsigned NOT NULL auto_increment,
...
) ENGINE=InnoDB AUTO_INCREMENT=51 DEFAULT CHARSET=latin1;
и таблица с внешним ключом, который на нее указывает:
DROP TABLE IF EXISTS `escolaterrafir`.`t23_aluno`;
CREATE TABLE `escolaterrafir`.`t23_aluno` (
...
`a21_saida_id` int(10) unsigned default NULL,
...
KEY `Index_7` (`a23_id_pedagogica`),
...
CONSTRAINT `FK_t23_aluno_8` FOREIGN KEY (`a21_saida_id`) REFERENCES `t21_turma` (`A21_ID`)
) ENGINE=InnoDB AUTO_INCREMENT=387 DEFAULT CHARSET=latin1;