代码之家  ›  专栏  ›  技术社区  ›  JAL

如何重构这个多表delete语句

  •  2
  • JAL  · 技术社区  · 15 年前

    有人能推荐一种更干净的方法来删除一个查询中具有一对多关系的行吗?

    using delete ,所以我不完全理解它是如何工作的。

    DELETE FROM ip_record,
                entry using ip_record 
                inner join entry 
          where ip_record.site_id = ? 
            and ip_record.ip = ? 
            and ip_record.id = entry.ip_id
    

    我有一个想法,这可以做得更干净的级联,但我有一个非理性的恐惧约束。数据库是MySQL。

    1 回复  |  直到 10 年前
        1
  •  4
  •   Hammerite    15 年前

    是,添加如下约束

    ALTER TABLE entry
        ADD CONSTRAINT constr_entry_fk_ip
        FOREIGN KEY fk_ip (ip_id) REFERENCES ip_record (id)
        ON DELETE CASCADE ON UPDATE CASCADE
    

    然后你就可以用

    DELETE FROM ip_record
    WHERE ip_record.site_id=? and ip_record.ip=?