Mysql SQL删除警告

Mysql SQL删除警告,mysql,foreign-keys,sql-delete,Mysql,Foreign Keys,Sql Delete,我的数据库中有两个表 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 N

我的数据库中有两个表

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

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

根据具体情况,基本上有两种方法:

将“删除级联”添加到外键约束。这将自动删除所有子行

如果不能更改数据库结构:只需在两个查询中进行,首先删除子行


仔细考虑删除子行是否可以接受。也许更好的解决方案是向您的经理添加IsActive标志之类的内容,而不是删除它们。

这对于评论来说太长了

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

相反,您可以考虑在“代码>管理器< /代码>表中添加一个标志来描述管理器是活动的还是不活动的。然后,您可以根据最近的销售额更新标志,并保留外键引用


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

可以在删除之前写入触发器并执行它,然后首先删除子数据,或者在约束中使用on delete cascade选项,这样我就必须删除现有的键,删除我需要的,并在删除后添加一个新的外键?回答得好。非常感谢。