外部约束键失败
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_id
与 Sentences.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。
我正在尝试在 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_id
与 Sentences.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。