私は MySQL を使用しており、他の多くのテーブルで外部キーとして使用されるインデックスを持つテーブルがあります。インデックスのデータ型を (符号付きから符号なし整数に) 変更したいのですが、これを行う最善の方法は何ですか?
インデックス フィールドのデータ型を変更しようとしましたが、他のテーブルの外部キーとして使用されているため失敗します。外部キーの 1 つでデータ型を変更しようとしましたが、インデックスのデータ型と一致しなかったため失敗しました。
すべての外部キー制約を手動で削除し、データ型を変更して制約を追加し直すことができると思いますが、このインデックスを外部キーとして使用するテーブルがたくさんあるため、これは大変な作業になります。変更中に外部キー制約を一時的にオフにする方法はありますか? また、インデックスを外部キーとして参照しているすべてのフィールドのリストを取得する方法はありますか?
更新: 外部キーのチェックをオフにした後、1 つの外部キーを変更しようとしましたが、チェックをオフにしていないようです:
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;