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

g52tjvyc  于 2021-06-24  发布在  Mysql
关注(0)|答案(1)|浏览(410)

嗨,伙计们,我正试图从三个表中删除多个记录。然而,它并没有像预期的那样工作。
我的问题:

  1. DELETE FROM offer, offer_products, offer_product_addons
  2. USING offer, offer_products, offer_product_addons
  3. WHERE offer.offer_number IS NULL
  4. AND offer_products.offer_id = offer.id
  5. AND offer_product_addons.offer_products_id = offer_products.id;

我的猜测是,当在其他表中找不到记录时,它不会删除记录。我已经尝试了join,但是它只删除了主表中的内容。

kknvjkwl

kknvjkwl1#

最好使用 CASCADE 多个操作的函数,即删除或更新。 CASCADE -如果打开 UPDATE CASCADE 或者 ON UPDATE SET NULL 递归以更新它以前在级联过程中更新过的同一个表,其行为类似于 RESTRICT . 这意味着您不能在更新级联或上使用自引用 UPDATE SET NULL 操作。这是为了防止级联更新产生无限循环。自我参照 ON DELETE SET NULL 另一方面,是可能的,因为是一个自我参照 ON DELETE CASCADE . 级联操作的嵌套深度不能超过15层。
有时,了解哪个表受 MySQL ON DELETE CASCADE 从父表中删除数据时的引用操作。您可以从information\u schema数据库中的引用\u约束中查询此数据,如下所示:
代码:

  1. USE information_schema;
  2. SELECT table_name
  3. FROM referential_constraints
  4. WHERE constraint_schema = 'database_name' AND
  5. referenced_table_name = 'parent_table' AND
  6. delete_rule = 'CASCADE'

例子:
例如,要查找与具有 CASCADE delete rule 在classicmodels数据库中,使用以下查询:

  1. USE information_schema;
  2. SELECT table_name
  3. FROM referential_constraints
  4. WHERE constraint_schema = 'classicmodels' AND
  5. referenced_table_name = 'buildings' AND
  6. delete_rule = 'CASCADE'

另一个可供选择的例子 DELETE CASCADE :
如果你的 cascading deletes 如果因为某个产品属于某个已被杀死的类别而对其进行核爆,那么您的外键设置不正确。对于示例表,应设置以下表:

  1. CREATE TABLE category (
  2. id int unsigned not null primary key,
  3. name VARCHAR(255) default null
  4. )Engine=InnoDB;
  5. CREATE TABLE product (
  6. id int unsigned not null primary key,
  7. name VARCHAR(255) default null
  8. )Engine=InnoDB;
  9. CREATE TABLE category_product (
  10. category_id int unsigned not null,
  11. product_id int unsigned not null,
  12. PRIMARY KEY (category_id, product_id),
  13. KEY pkey (product_id),
  14. FOREIGN KEY (category_id) REFERENCES category (id)
  15. ON DELETE CASCADE
  16. ON UPDATE CASCADE,
  17. FOREIGN KEY (product_id) REFERENCES product (id)
  18. ON DELETE CASCADE
  19. ON UPDATE CASCADE
  20. )Engine=InnoDB;
展开查看全部

相关问题