java.sql.SQLIntegrityConstraintViolationException: 無法洗掉或更新父行:外鍵約束失敗 (
hrms.employees, CONSTRAINTFKe4i9i8vu1j96m71g4v98kqirbFOREIGN KEY (designation_id) REFERENCESdesignations(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
uj5u.com熱心網友回復:
Spring與您的問題完全無關。它全都與 MySQL 資料庫以及您在 DDL 中定義表的方式有關。
如果由于您定義該約束的方式而在您的資料庫中存在子行,則您不能洗掉父行。
有一種ON DELETE ....語法告訴 MySQL 在洗掉父行時要做什么,默認情況下 MySQL 將拒絕洗掉,您可以按照MySQL 手冊中指定的多種方式更改所有奇怪的地方。
在您的情況下,您希望在洗掉部門時不洗掉員工,并且您擁有該列
`department_id` bigint DEFAULT NULL,
定義為 DEFAULT NULL 然后更改您的 CONSTRAINT 如下
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://www.uj5u.com/net/433491.html
