mysql - 如何重构这个多表删除语句

标签 mysql sql using cascade sql-delete

任何人都可以建议一种更干净的方法来删除一个查询中具有一对多关系的行吗?

这可行,但我对 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。

最佳答案

是的,添加约束如下

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=?

执行之前需要加入的操作。

关于mysql - 如何重构这个多表删除语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3151961/

相关文章:

mysql - 计算接收802.11数据包的时间

mysql - 多个数据库或多行表

sql - 查找两个不同时间线的时间重叠

php - 一列上的多个计数值

php用户登录脚本

java , Selenium ;编译代码时抛出异常

带有概念的 C++ 别名模板(typedef)?

c# - 当我将它传递给 IDisposable 类时是否需要 Dispose Stream?

mysql - 从带有别名的派生表中选择给出错误答案

sql - 冒号 ":"在 SQL 查询中起什么作用?