java.sql.SQLIntegrityConstraintViolationException:无法删除或更新父行:外键约束失败(
hrms.employees、约束FKe4i9i8vu1j96m71g4v98kqirb外键(designation_id)引用designations(id))
我只是在这个问题上,我尝试删除一个实体,但实体与另一个实体有关系,而另一个实体有另一个关系,想象一下这是表格。

当我要删除部门时,如何将员工和职务从部门中分离出来。我可以删除代码中的指定,但我不想删除具有与部门和指定相关联的外键的员工。
CREATE TABLE `departments` (
`id` bigint NOT NULL AUTO_INCREMENT,
`name` varchar(150) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci
CREATE TABLE `designations` (
`id` bigint NOT NULL AUTO_INCREMENT,
`department_name` varchar(40) DEFAULT NULL,
`name` varchar(140) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci
CREATE TABLE `employees` (
`id` bigint NOT NULL AUTO_INCREMENT,
`address` varchar(255) NOT NULL,
`dob` varchar(255) DEFAULT NULL,
`email` varchar(35) NOT NULL,
`employee_number` varchar(255) NOT NULL,
`first_name` varchar(40) NOT NULL,
`full_name` varchar(100) NOT NULL,
`gender` varchar(255) DEFAULT NULL,
`join_date` varchar(255) NOT NULL,
`last_name` varchar(40) NOT NULL,
`password` varchar(40) NOT NULL,
`phone_number` varchar(255) NOT NULL,
`username` varchar(255) NOT NULL,
`department_id` bigint DEFAULT NULL,
`designation_id` bigint DEFAULT NULL,
`avatar_image` varchar(64) DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `FKgy4qe3dnqrm3ktd76sxp7n4c2` (`department_id`),
KEY `FKe4i9i8vu1j96m71g4v98kqirb` (`designation_id`),
CONSTRAINT `FKe4i9i8vu1j96m71g4v98kqirb`
FOREIGN KEY (`designation_id`)
REFERENCES `designations` (`id`),
CONSTRAINT `FKgy4qe3dnqrm3ktd76sxp7n4c2`
FOREIGN KEY (`department_id`)
REFERENCES `departments` (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci发布于 2022-02-21 09:34:01
春天和你的问题完全无关。这与MySQL数据库以及在DDL中定义表的方式有关。
如果数据库中存在子行,则不能删除父行,因为您是如何定义该约束的。
有一个ON DELETE ....语法,它告诉MySQL在删除父行时应该做什么,默认情况下,MySQL将拒绝删除,您可以通过许多方式(如MySQL手册中所指定的)对所有奇怪的位置进行更改。
在您的情况下,因为您希望在删除部门时不删除员工,并且您有该列
`department_id` bigint DEFAULT NULL,定义为默认NULL,然后更改约束,如下所示
CONSTRAINT `FKgy4qe3dnqrm3ktd76sxp7n4c2`
FOREIGN KEY (`department_id`)
REFERENCES `departments` (`id`)
ON DELETE SET NULL当然,你也可以
CONSTRAINT `FKgy4qe3dnqrm3ktd76sxp7n4c2`
FOREIGN KEY (`department_id`)
REFERENCES `departments` (`id`)
ON DELETE SET DEFAULT在本例中,两种方法都会执行相同的操作,因为对于该列,默认值为NULL。
https://stackoverflow.com/questions/71187180
复制相似问题