无法添加或更新子行,外键失败

问题描述

这是我的sql文件

    DROP DATABASE  IF EXISTS `dbstudents`;

CREATE DATABASE  IF NOT EXISTS `dbstudents`;
USE `dbstudents`;

DROP TABLE IF EXISTS `student_detail`;

CREATE TABLE `student_detail` (
  `id` int(11) NOT NULL AUTO_INCREMENT,`fav_programming_language` varchar(128) DEFAULT NULL,`city` varchar(45) DEFAULT NULL,PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=latin1;


DROP TABLE IF EXISTS `student`;
CREATE TABLE `student` (
   `id` int(11) NOT NULL AUTO_INCREMENT,`first_name` varchar(45) DEFAULT NULL,`last_name` varchar(45) DEFAULT NULL,`email` varchar(45) DEFAULT NULL,`student_detail_id` int(11) DEFAULT NULL,`password` varchar(50) NOT NULL,`enabled` tinyint(1) NOT NULL,PRIMARY KEY (`id`),KEY `FK_DETAIL_idx` (`student_detail_id`),CONSTRAINT `FK_DETAIL` FOREIGN KEY (`student_detail_id`) REFERENCES `student_detail` (`id`) ON DELETE NO ACTION ON UPDATE NO ACTION
) ENGINE=InnoDB DEFAULT CHARSET=latin1;



DROP TABLE IF EXISTS `authorities`;
CREATE TABLE `authorities` (
  `id` int(11) NOT NULL AUTO_INCREMENT,`authority` varchar(50) NOT NULL,UNIQUE KEY `authorities_idx_1` (`id`,`authority`),CONSTRAINT `authorities_ibfk_1` FOREIGN KEY (`id`) REFERENCES `student` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

这是插入语句:

    INSERT INTO `student` 
VALUES 
(1,'Stefan','Stefanovic','stefan@gmail.com',1,'stefan123',1),(2,'Marko','Markovic','marko@gmail.com','marko123',(3,'Jovan','Jovanovic','jovan@gmail.com','jovan123',1);

这是错误

 Error Code: 1452. Cannot add or update a child row: a foreign key constraint fails (`dbstudents`.`student`,CONSTRAINT `FK_DETAIL` FOREIGN KEY (`student_detail_id`) REFERENCES `student_detail` (`id`) ON DELETE NO ACTION ON UPDATE NO ACTION)

我找到了一些解决方案,但所有解决方案都与我的有所不同。如何解决这个问题?当我尝试填写除自治权外的每个表时发生错误

解决方法

由于系统中没有任何 student_details,请使用 NULL 代替数字并稍后添加该数字

    INSERT INTO `student` 
VALUES 
(1,'Stefan','Stefanovic','stefan@gmail.com',NULL,'stefan123',1),(2,'Marko','Markovic','marko@gmail.com','marko123',(3,'Jovan','Jovanovic','jovan@gmail.com','jovan123',1);

参见示例 https://dbfiddle.uk/?rdbms=mysql_8.0&fiddle=c1bbdd8ee9b9a9af244da774cdb41175