gpt4 book ai didi

mysql - 从多个表中删除 MySQL 记录无法按预期工作

转载 作者:行者123 更新时间:2023-11-29 11:15:14 26 4
gpt4 key购买 nike

大家好,我正在尝试从三个表中删除多条记录。然而它并没有按预期工作。

我的查询:

DELETE FROM offer, offer_products, offer_product_addons 
USING offer, offer_products, offer_product_addons
WHERE offer.offer_number IS NULL
AND offer_products.offer_id = offer.id
AND offer_product_addons.offer_products_id = offer_products.id;

我的猜测是,当其他表之一中没有找到记录时,它不会删除记录。我怎样才能做到这一点,我已经尝试过连接,但这只删除了主表中的内容。

最佳答案

最好在多个操作(即删除或更新)上使用 CASCADE 函数。

CASCADE - 如果 ON UPDATE CASCADEON UPDATE SET NULL 递归更新之前在级联期间更新过的同一个表,则其作用类似于RESTRICT。这意味着您不能使用自引用 ON UPDATE CASCADE 或 ON UPDATE SET NULL 操作。这是为了防止级联更新导致无限循环。另一方面,自引用 ON DELETE SET NULL 是可能的,自引用 ON DELETE CASCADE 也是如此。级联操作的嵌套深度不得超过 15 层。

有时,当您从父表中删除数据时,了解哪个表受到 MySQL ON DELETE CASCADE 引用操作的影响是很有用的。您可以从 information_schema 数据库中的referential_constraints 查询此数据,如下所示:

代码:

USE information_schema;
SELECT table_name
FROM referential_constraints
WHERE constraint_schema = 'database_name' AND
referenced_table_name = 'parent_table' AND
delete_rule = 'CASCADE'

示例:

例如,要在 classicmodels 数据库中查找与具有 CASCADE 删除规则buildings 表关联的表,请使用以下命令查询:

USE information_schema;

SELECT table_name
FROM referential_constraints
WHERE constraint_schema = 'classicmodels' AND
referenced_table_name = 'buildings' AND
delete_rule = 'CASCADE'

DELETE CASCADE的另一个替代示例:

如果您的级联删除删除了某个产品,因为它是已被删除的类别的成员,那么您的外键设置不正确。鉴于您的示例表,您应该具有以下表设置:

CREATE TABLE category (
id int unsigned not null primary key,
name VARCHAR(255) default null
)Engine=InnoDB;

CREATE TABLE product (
id int unsigned not null primary key,
name VARCHAR(255) default null
)Engine=InnoDB;

CREATE TABLE category_product (
category_id int unsigned not null,
product_id int unsigned not null,
PRIMARY KEY (category_id, product_id),
KEY pkey (product_id),
FOREIGN KEY (category_id) REFERENCES category (id)
ON DELETE CASCADE
ON UPDATE CASCADE,
FOREIGN KEY (product_id) REFERENCES product (id)
ON DELETE CASCADE
ON UPDATE CASCADE
)Engine=InnoDB;

关于mysql - 从多个表中删除 MySQL 记录无法按预期工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39869472/

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