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