Нарушение ограничения целостности: 1452 не Может добавить или обновить дочернюю строку:

Я пытаюсь вставить значения в свою таблицу комментариев, и я получаю ошибку. Его высказывание, что я не могу добавить или обновить дочернюю строку и я понятия не имею, что это означает.

моя схема выглядит примерно так

-- ----------------------------
-- Table structure for `comments`
-- ----------------------------
DROP TABLE IF EXISTS `comments`;
CREATE TABLE `comments` (
  `id` varchar(36) NOT NULL,
  `project_id` varchar(36) NOT NULL,
  `user_id` varchar(36) NOT NULL,
  `task_id` varchar(36) NOT NULL,
  `data_type_id` varchar(36) NOT NULL,
  `data_path` varchar(255) DEFAULT NULL,
  `message` longtext,
  `created` datetime DEFAULT NULL,
  `modified` datetime DEFAULT NULL,
  PRIMARY KEY (`id`),
  KEY `fk_comments_users` (`user_id`),
  KEY `fk_comments_projects1` (`project_id`),
  KEY `fk_comments_data_types1` (`data_type_id`),
  CONSTRAINT `fk_comments_data_types1` FOREIGN KEY (`data_type_id`) REFERENCES `data_types` (`id`) ON DELETE NO ACTION ON UPDATE NO ACTION,
  CONSTRAINT `fk_comments_projects1` FOREIGN KEY (`project_id`) REFERENCES `projects` (`id`) ON DELETE NO ACTION ON UPDATE NO ACTION,
  CONSTRAINT `fk_comments_users` FOREIGN KEY (`user_id`) REFERENCES `users` (`id`) ON DELETE NO ACTION ON UPDATE NO ACTION
) ENGINE=InnoDB DEFAULT CHARSET=utf32;

-- ----------------------------
-- Records of comments
-- ----------------------------

-- ----------------------------
-- Table structure for `projects`
-- ----------------------------
DROP TABLE IF EXISTS `projects`;
CREATE TABLE `projects` (
  `id` varchar(36) NOT NULL,
  `user_id` varchar(36) NOT NULL,
  `title` varchar(45) DEFAULT NULL,
  `description` longtext,
  `created` datetime DEFAULT NULL,
  `modified` datetime DEFAULT NULL,
  PRIMARY KEY (`id`),
  KEY `fk_projects_users1` (`user_id`),
  CONSTRAINT `fk_projects_users1` FOREIGN KEY (`user_id`) REFERENCES `users` (`id`) ON DELETE NO ACTION ON UPDATE NO ACTION
) ENGINE=InnoDB DEFAULT CHARSET=utf32;

-- ----------------------------
-- Records of projects
-- ----------------------------
INSERT INTO `projects` VALUES ('50dcbc72-3410-4596-8b71-0e80ae7aaee3', '50dcbc5c-d684-40bf-9715-0becae7aaee3', 'Brand New Project', 'This is a brand new project', '2012-12-27 15:24:02', '2012-12-27 15:24:02');

и mysql оператор, который я пытаюсь сделать, выглядит примерно так

INSERT INTO `anthonyl_fbpj`.`comments` (`project_id`, `user_id`, `task_id`, `data_type_id`, `message`, `modified`, `created`, `id`) 
VALUES ('50dc845a-83e4-4db3-8705-5432ae7aaee3', '50dcbc5c-d684-40bf-9715-0becae7aaee3', '1', '50d32e5c-abdc-491a-a0ef-25d84e9f49a8', 'this is a test', '2012-12-27 19:20:46', '2012-12-27 19:20:46', '50dcf3ee-8bf4-4685-aa45-4eb4ae7aaee3')

ошибка, которую я получаю, похожа на это

SQLSTATE[23000]: нарушение Ограничения целостности: 1452 не Может добавить или обновить дочернюю строку: ограничение внешнего ключа перестало работать (anthonyl_fbpj.comments, ОГРАНИЧЕНИЕ fk_comments_projects1 FOREIGN KEY (project_id) ССЫЛКИ projects (id) НА УДАЛЯЮТ NO ACTION ON UPDATE NO ACTION),

61
задан 28 December 2012 в 05:59

3 ответа

Я надеюсь, что мое решение поможет. У меня была подобная ошибка в Laravel. Я добавил внешний ключ к неправильной таблице.
Неверный код:

Schema::create('comments', function (Blueprint $table) {
$table->unsignedBigInteger('post_id')->index()->nullable();
...
$table->foreign('post_id')->references('id')->on('comments')->onDelete('cascade');
    });


Schema::create('posts', function (Blueprint $table) {
    $table->bigIncrements('id');
    ...
    });

отметьте к функции на ('комментариях') выше. Правильный код

 $table->foreign('post_id')->references('id')->on('posts')->onDelete('cascade');
1
ответ дан 31 October 2019 в 15:37

У меня была эта проблема, когда я случайно использовал НЕСПРАВЕДЛИВОСТЬ "uuid" в моей дочерней записи. Когда это происходит ограничительные взгляды от ребенка к родительской записи, чтобы гарантировать, что ссылка корректна. Я генерировал его вручную, когда я уже подстроил свою Модель, чтобы сделать это автоматически. Таким образом, моя фиксация была:

$parent = Parent:create($recData); // asssigning autogenerated uuid into $parent

Затем, когда я назвал свой дочерний класс для вставки детей, я передал это значение var:

$parent->uuid

Hope, которая помогает.

0
ответ дан 31 October 2019 в 15:37

Возможно, у Вас есть некоторые строки в таблице, что Вы хотите создать de FK.

Выполнение миграция с foreign_key_checks ОТ Вставки только те записи, которые имеют соответствующее идентификационное поле в таблице содержания.

0
ответ дан 31 October 2019 в 15:37

Другие вопросы по тегам:

Похожие вопросы: