mysql - SQL 删除警告

标签 mysql foreign-keys sql-delete

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

相关文章:

php - 更新变量值,以不同方式进行相同的 MySQL 查询

php - SELECT 查询是否有可能在 Joomla DB 中插入数据?

mysql - 存储/构建 mysql 世界国家、州、地区、城市的最佳方式......?

sql-server - 如何更新主键

mysql - 我想从 MySQL 数据库中删除一行

postgresql - 如何删除 Postgres 中的两行重复数据之一?

sql - 如何以编程方式检查行是否可删除?

php - 如何使用 bootstrap 和 Ajax 根据所选 ID 从 MySQL 数据库获取数据?

php fwrite 不写入 öäü/utf8

postgresql - 如何在 Postgresql 中获取 FK 引用的表