首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法删除或更新没有级联的父行: spring问题

无法删除或更新没有级联的父行: spring问题
EN

Stack Overflow用户
提问于 2022-02-19 17:02:48
回答 1查看 744关注 0票数 -2

java.sql.SQLIntegrityConstraintViolationException:无法删除或更新父行:外键约束失败(hrms.employees、约束FKe4i9i8vu1j96m71g4v98kqirb外键(designation_id)引用designations (id))

我只是在这个问题上,我尝试删除一个实体,但实体与另一个实体有关系,而另一个实体有另一个关系,想象一下这是表格。

当我要删除部门时,如何将员工和职务从部门中分离出来。我可以删除代码中的指定,但我不想删除具有与部门和指定相关联的外键的员工。

代码语言:javascript
复制
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
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-02-21 09:34:01

春天和你的问题完全无关。这与MySQL数据库以及在DDL中定义表的方式有关。

如果数据库中存在子行,则不能删除父行,因为您是如何定义该约束的。

有一个ON DELETE ....语法,它告诉MySQL在删除父行时应该做什么,默认情况下,MySQL将拒绝删除,您可以通过许多方式(如MySQL手册中所指定的)对所有奇怪的位置进行更改。

在您的情况下,因为您希望在删除部门时不删除员工,并且您有该列

代码语言:javascript
复制
`department_id` bigint DEFAULT NULL,

定义为默认NULL,然后更改约束,如下所示

代码语言:javascript
复制
CONSTRAINT `FKgy4qe3dnqrm3ktd76sxp7n4c2` 
        FOREIGN KEY (`department_id`) 
        REFERENCES `departments` (`id`)
    ON DELETE SET NULL

当然,你也可以

代码语言:javascript
复制
CONSTRAINT `FKgy4qe3dnqrm3ktd76sxp7n4c2` 
        FOREIGN KEY (`department_id`) 
        REFERENCES `departments` (`id`)
    ON DELETE SET DEFAULT

在本例中,两种方法都会执行相同的操作,因为对于该列,默认值为NULL。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71187180

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档