gpt4 book ai didi

mysql - SQL 删除警告

转载 作者:行者123 更新时间:2023-11-29 12:36:43 25 4
gpt4 key购买 nike

我的数据库中有 2 个表。

CREATE TABLE `Managers`(
`idManagers` INT NOT NULL AUTO_INCREMENT,
`fullName` VARCHAR(100),
`address` VARCHAR(100),
`worksSince` DATE,
`salary` DOUBLE,
PRIMARY KEY (`idManagers`)) ENGINE = InnoDB;


CREATE TABLE `Sell` (
`idSell` INT NOT NULL AUTO_INCREMENT,
`idManagers` INT,
`item` VARCHAR(100),
`price` DOUBLE,
`sellDate` DATE,
PRIMARY KEY (`idSell`),
INDEX `s1_idx` (`idManagers` ASC),
CONSTRAINT `s1`
FOREIGN KEY (`idManagers`)
REFERENCES `Managers` (`idManagers`)
ON DELETE NO ACTION
ON UPDATE NO ACTION)
ENGINE = InnoDB;

我需要删除 2013 年没有销售任何产品的经理。我想出了:

DELETE managers from managers join sell on sell.idManagers=managers.idManagers where NOT
YEAR(sell.sellDate) = 2013; SET FOREIGN_KEY_CHECKS=0

它工作正常,但我必须禁用外键检查,因为我遇到了无法删除或更新父行的错误。我想知道,有没有办法在不禁用外国检查的情况下做到这一点?

最佳答案

如果您想要删除经理但保留他们之前的销售额,请删除外键引用。表之间将没有关系完整性。换句话说,不要对你的数据结构撒谎。

相反,您可以考虑向 managers 表添加一个标志来描述管理器是否处于事件状态。然后,您可以根据最近的销售情况更新标志并保留外键引用。

或者,从两个表中删除经理。

关于mysql - SQL 删除警告,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26672142/

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