无法添加或更新子行,外键失败
cant add or update child row, foreign key fails
这是我的 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', 1, 'marko123', 1),
(3, 'Jovan', 'Jovanovic', 'jovan@gmail.com', 1, '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)
我找到了一些解决方案,但它们都与我的有所不同。如何解决这个问题?当我尝试填写每个 table 除了 autorities
时出现错误
因为系统中还没有 student_details,所以使用 NULL 代替数字,稍后添加数字
INSERT INTO `student`
VALUES
(1, 'Stefan', 'Stefanovic', 'stefan@gmail.com', NULL, 'stefan123', 1),
(2, 'Marko', 'Markovic', 'marko@gmail.com', NULL, 'marko123', 1),
(3, 'Jovan', 'Jovanovic', 'jovan@gmail.com', NULL, 'jovan123', 1);
查看示例 https://dbfiddle.uk/?rdbms=mysql_8.0&fiddle=c1bbdd8ee9b9a9af244da774cdb41175
这是我的 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', 1, 'marko123', 1),
(3, 'Jovan', 'Jovanovic', 'jovan@gmail.com', 1, '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)
我找到了一些解决方案,但它们都与我的有所不同。如何解决这个问题?当我尝试填写每个 table 除了 autorities
时出现错误因为系统中还没有 student_details,所以使用 NULL 代替数字,稍后添加数字
INSERT INTO `student`
VALUES
(1, 'Stefan', 'Stefanovic', 'stefan@gmail.com', NULL, 'stefan123', 1),
(2, 'Marko', 'Markovic', 'marko@gmail.com', NULL, 'marko123', 1),
(3, 'Jovan', 'Jovanovic', 'jovan@gmail.com', NULL, 'jovan123', 1);
查看示例 https://dbfiddle.uk/?rdbms=mysql_8.0&fiddle=c1bbdd8ee9b9a9af244da774cdb41175