外部约束键失败

Fail on foreign constraint key

我正在尝试在 table Reviews 中的字段 review_id 和 table Sentences 中的 id 之间创建外键. tables 的结构如下:

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;

我遇到以下错误,我不明白问题出在哪里。

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`)

尝试在索引 PRIMARY 元组中添加子项 table: 数据元组:8 个字段; 0:长度 36;十六进制 37626532323335652d616663392d313165362d383935342d6334623333031636466363237;升序 7be2235e-afc9-11e6-8954-c4b301cdf627;; ...

试试这个:

ALTER TABLE Reviews
ADD CONSTRAINT rev-to-sents
ADD FOREIGN KEY (review_id)
REFERENCES Sentences (id)

问题听起来像是您正在尝试添加一个包含不匹配行的外键。如果是这样,您的首要任务是找到 non-matching 行并确定问题的范围换句话说,您遇到 Reviewes.review_idSentences.id

中的任何值不匹配的情况

您需要先找到并修复您的数据。这意味着:

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

因为你在Sentences.id上有NOT NULL约束,只有当连接条件失败时,id才会为null。