0

mysql でインデックスと複数の外部キーを作成しようとしていますが、以下のコードを含めると:

CREATE INDEX par_ind on Image_Question (SessionId,QuestionId);

ALTER TABLE Image_Question ADD CONSTRAINT FK_CONSTRAINT_NAME
                           FOREIGN KEY (SessionId,QuestionId) 
                             REFERENCES Question(SessionId,QuestionId)
                             ON DELETE CASCADE;

インデックスの作成はうまくいきましたが、テーブルを変更して外部キーを追加することはできません。次のようなエラーが表示されます。

#1452 - Cannot add or update a child row: a foreign key constraint fails (`mobile_app`.<result 2 when explaining filename '#sql-4517_14f1a'>, CONSTRAINT `FK_CONSTRAINT_NAME` FOREIGN KEY (`SessionId`, `QuestionId`) REFERENCES `Question` (`SessionId`, `QuestionId`) ON)

このエラーの意味と、このエラーを解決するにはどうすればよいですか?

以下は Image_Question テーブルです。

CREATE TABLE Image_Question (ImageQuestionId INT     NOT NULL, 
                             ImageId          INT     NOT NULL,
                             SessionId        CHAR(3) NOT NULL,
                             QuestionId       INT     NOT NULL,
                            PRIMARY KEY (ImageQuestionId)
                            ) ENGINE=INNODB;

以下は質問表です。

CREATE TABLE Question (QuestionId INT      NOT NULL, 
                       SessionId  CHAR(3)  NOT NULL,
                       Question   CHAR(10) NOT NULL ) ENGINE=INNODB;
4

1 に答える 1

1

ここで私はあなたの問題を整理し、私のためにうまくいきました

ALTER TABLE `question`     CHANGE `QuestionId` `QuestionId` INT(11) NOT NULL,    ADD PRIMARY KEY(`QuestionId`);

最初に私はに変更しQuestionIdましたprimary key

ALTER TABLE `image_question` ADD INDEX `questionId` (`QuestionId`);

次に、のインデックスを追加しましQuestionIdimage_question

ALTER TABLE  `question` ADD CONSTRAINT `FK_question` FOREIGN KEY (`QuestionId`)
REFERENCES `image_question` (`QuestionId`) ON DELETE NO ACTION ;

そして、最初の関係はQuestionId正常に機能します

ALTER TABLE `question`     CHANGE `SessionId` `SessionId` INT(11) NOT NULL;
ALTER TABLE `image_question`     CHANGE `SessionId` `SessionId` INT(11) NOT NULL;

SessionId次に、両方のテーブルのデータ型を次のように変更しましたint

ALTER TABLE `image_question` ADD INDEX `NewIndex1` (`SessionId`);

次に、のインデックスを追加しましSessionIdimage_question

ALTER TABLE `image_question` ADD CONSTRAINT `FK_image_question` FOREIGN KEY (`SessionId`) REFERENCES `question` (`SessionId`) ON DELETE NO ACTION ;

SessionIdそして、これがあなたにとってもうまくいくことを願って、あなたの2番目の関係です

于 2012-09-30T05:40:52.450 に答える