gpt4 book ai didi

java - 单向关系 : Remove cascade

转载 作者:行者123 更新时间:2023-11-29 18:32:33 24 4
gpt4 key购买 nike

我有两张 table :

CREATE TABLE IF NOT EXISTS `DB`.`global_history` (
`ID` INT(11) AUTO_INCREMENT,
`ID_HISTORY` INT(11) NULL,

PRIMARY KEY (`ID`),

CONSTRAINT `FK_HISTORY_GLOBAL_HISTORY`
FOREIGN KEY (`ID_HISTORY`)
REFERENCES `DB`.`history` (`ID`)
ON DELETE NO ACTION
ON UPDATE NO ACTION);

第二个表:

CREATE TABLE IF NOT EXISTS `DB`.`history` (
`ID` INT(11) AUTO_INCREMENT,
`TIMESTAMP` DATETIME NOT NULL,
PRIMARY KEY (`ID`));

但是当我尝试删除历史记录(第二个表)中的一行时,我收到此错误:

--> Cannot delete or update a parent row : a foreign key constraint fails

我希望关系是@ManyToOne 因此,当我从 global_history 中删除一行时,它不会从 history 中删除任何行

这是我的模型类:

全局历史:

@ManyToOne
@JoinColumn(name = "ID_HISTORY", nullable = true)
private History history;

-->历史是一个简单的类

最佳答案

当您定义从子表(global_history)到父表(History 表)的 F.K 时,子表不能有无效的 F.K。所以你应该决定删除父项,这会导致 F.K 无效。级联删除的外键意味着如果父表中的一条记录被删除,那么子表中相应的记录也会被自动删除。这在 SQL Server 中称为级联删除。

因此,如果您想防止删除相应的子行,您可以使用以下命令设置空值或默认值:

 ON DELETE SET NULL
ON DELETE SET DEFAULT

这是完整的格式:

CREATE TABLE child_table
(
column1 datatype [ NULL | NOT NULL ],
column2 datatype [ NULL | NOT NULL ],
...

CONSTRAINT fk_name
FOREIGN KEY (child_col1, child_col2, ... child_col_n)
REFERENCES parent_table (parent_col1, parent_col2, ... parent_col_n)
ON DELETE CASCADE
[ ON UPDATE { NO ACTION | CASCADE | SET NULL | SET DEFAULT } ]
)

https://www.techonthenet.com/sql_server/foreign_keys/foreign_delete.php

关于java - 单向关系 : Remove cascade,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45566726/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com