mysql - 外部约束键失败

标签 mysql sql foreign-keys foreign-key-relationship

我正在尝试在字段 review_id 之间创建外键在表中Reviewsid在表中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;

我遇到以下错误,但我不明白问题所在。

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 元组中添加: 数据元组:8个字段; 0:长度36;十六进制 37626532323335652d616663392d313165362d383935342d633462333031636466363237; asc 7be2235e-afc9-11e6-8954-c4b301cdf627;; ...

最佳答案

问题听起来像是您正在尝试添加行不匹配的外键。如果是这样,您的首要任务是找到不匹配的行并确定问题的范围换句话说,您会遇到 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。

关于mysql - 外部约束键失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42200777/

相关文章:

MySQL 依次选择和分组行

php - 从 PHP 变量的 3 个表中的 MYSQL 查找电子邮件

sql - 跨多个数据库查找表的总行数

sql - 在 join 中使用 distinct 关键字

mysql - Mysql无法建表

sql - 在哪种情况下您更愿意使用 mysql 而不是 sql server,反之亦然?

c# - Datagridview 更新到 DB mysql 错误 ""并发冲突 : the updatecommand affected 0 of the expected 1 records""

sql - PostgreSQL:在同一查询中使用计算列

mysql - 无法添加我的第二个外键约束

java - SQLite 外键约束