2017-02-13 5 views
0

テーブルとidのフィールドreview_idとテーブルSentencesのフィールドの間に外部キーを作成しようとしています。テーブルの構造は次のとおりです。外部制約キーに失敗しました

CREATE TABLE `Reviews` (
    `review_id` varchar(255) CHARACTER SET utf8 NOT NULL, 
    `package_name` varchar(255) CHARACTER SET utf8 DEFAULT NULL, 
    `review_content` text CHARACTER SET utf8, 
    `review_date` date DEFAULT NULL, 
    `star_rating` int(11) DEFAULT NULL, 
    `app_version_id` int(11) NOT NULL, 
    PRIMARY KEY (`review_id`), 
    KEY `app_version_id` (`app_version_id`) 
) ENGINE=InnoDB DEFAULT CHARSET=latin1; 

CREATE TABLE `Sentences` (
    `id` varchar(255) NOT NULL DEFAULT '', 
    `review` text, 
    `category` varchar(255) DEFAULT NULL, 
    `topic` varchar(255) DEFAULT NULL, 
    KEY `rev-id` (`id`) 
) ENGINE=InnoDB DEFAULT CHARSET=utf8; 

私は次のエラーに直面していますが、問題の内容を理解できません。 データタプル:インデックスPRIMARYタプルで、子テーブルに追加しようとし

ALTER TABLE `Reviews` ADD CONSTRAINT `rev-to-sents` FOREIGN KEY (`review_id`) REFERENCES `Sentences` (`id`) 
Foreign key constraint fails for table `msr test db`.`#sql-75_d`: 
, 
    CONSTRAINT `rev-to-sents` FOREIGN KEY (`review_id`) REFERENCES `Sentences` (`id`) 

8つの分野。 0:len 36;ヘックス37626532323335652d616663392d313165362d383935342d633462333031636466363237; asc 7be2235e-afc9-11e6-8954-c4b301cdf627 ;; ...

+1

残念ながら、MySQLは外部キー定義エラーに関して実際のエラーメッセージを表示しません。あなたは 'SHOW ENGINE INNODB STATUS'を実行し、«最新のキーエラー»セクションでそれを見つける必要があります。 [show engine queries](https://dev.mysql.com/doc/refman/5.7/en/show-engine.html)には、['PROCESS'権限](https://dev.mysql)が必要です。あなたの正規のMySQLユーザが持っていないかもしれない、あなたが特権を割り当てるか、ルートとしてクエリを実行することができます。 –

答えて

2

問題が聞こえます。もし一致しない行を見つけて問題の範囲を特定するのであれば、Reviewes.review_idはどんな値とも一致しない場合があります。Sentences.id

まず、データを見つけて修正する必要があります。これが意味:

SELECT review_id FROM Reviews 
    LEFT JOIN Sentences ON review_id = Sentences.id 
WHERE Sentences.id IS NULL; 

あなたはSentences.idNOT NULL制約を持っているので、条件が失敗した場合にのみ参加、idはnullになります。

+0

はい、あなたはまったく正しいです。このエラーは「不一致」が原因であり、それはまったく予期せぬものでした。データを修正してから、もう一度試してみます! –

0

はこれを試してください:あなたが一致しない行と外部キーを追加しようとしているよう

ALTER TABLE Reviews 
ADD CONSTRAINT rev-to-sents 
ADD FOREIGN KEY (review_id) 
REFERENCES Sentences (id) 
関連する問題