2016-05-03 26 views
0

としてリンクされたときに、私はこのようなシナリオを持っている:変更主キー、外部キー

CREATE TABLE `Users` (
    `IdUser` bigint(20) NOT NULL PRIMARY KEY 
) ENGINE=InnoDB DEFAULT CHARSET=utf8; 

CREATE TABLE `MainTable` (
    `IdLite` bigint(20) NOT NULL PRIMARY KEY 
) ENGINE=InnoDB DEFAULT CHARSET=utf8; 

CREATE TABLE `LinkedTable` (
    `IdUser` bigint(20) NOT NULL, 
    `IdLite` bigint(20) NOT NULL, 
PRIMARY KEY (`IdUser`, `IdLite`), 
FOREIGN KEY (`IdUser`) REFERENCES `Users` (`IdUser`), 
FOREIGN KEY (`IdLite`) REFERENCES `MainTable` (`IdLite`) 
) ENGINE=InnoDB DEFAULT CHARSET=utf8; 

私はこのようなクエリでUnsignedIdLiteを変更しようとしています:

SET FOREIGN_KEY_CHECKS=0; 
ALTER TABLE `MainTable` CHANGE `IdLite` 
    `IdLite` BIGINT(20) UNSIGNED NOT NULL AUTO_INCREMENT; 
ALTER TABLE `LinkedTable` CHANGE `IdLite` 
    `IdLite` BIGINT(20) UNSIGNED NOT NULL; 
SET FOREIGN_KEY_CHECKS=1; 

私はエラーを取得:

errno: 150 - Foreign key constraint is incorrectly formed

どうすれば解決できますか?

答えて

2

既存のFK制約で使用される列のデータ型を変更することはできません。あなたの答えのための

ALTER TABLE LinkedTable 
    DROP FOREIGN KEY linkedtable_ibfk_2; -- or whatever the symbol is named 

ALTER TABLE MainTable 
    MODIFY IdLite SERIAL; -- alias of BIGINT UNSIGNED NOT NULL AUTO_INCREMENT UNIQUE 

ALTER TABLE LinkedTable 
    MODIFY IdLite BIGINT UNSIGNED NOT NULL, 
    ADD FOREIGN KEY (IdLite) REFERENCES MainTable (IdLite); 
+0

おかげで、私は別のキーワードを教えるための(シリアル):

あなたは、FK制約をドロップする列のデータ型を変更し、FK制約を再作成することができます。 – genespos

関連する問題