我的数据库中有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


它工作正常,但是我必须禁用外键检查,因为我遇到了无法删除或更新父行的错误。我想知道,有什么方法可以不禁用外国支票吗?

最佳答案

这个评论太长了。

如果要删除经理但保留他们以前的销售记录,请删除foreign key引用。在表之间,您将没有关系完整性。换句话说,不要说谎于您的数据结构。

相反,您可以考虑将标志添加到managers表中以描述管理器是活动的还是非活动的。然后,您可以基于最近的销售来更新标志并保留外键引用。

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

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

10-10 02:17