【问题标题】:MySQL: delete all rows not just updatedMySQL:删除所有行,而不仅仅是更新
【发布时间】:2012-02-13 11:34:31
【问题描述】:

这个想法是,在循环提交表单之后,所有不只是由表单更新的行都会从数据库中删除。

是否有类似的优雅 MySQL 声明?

【问题讨论】:

  • 一种选择是,在事务中,先发制人地删除所有行,然后从表单中插入“更新”的行。

标签: php mysql forms


【解决方案1】:

事先删除是危险的;如果用户关闭浏览器怎么办?辅助存储主键是一种选择。最简单的结果是这样的:

1) 将所有匹配的行日期设置为 1970 年 1 月 1 日。 2) 提交表格,包括更新行中的当前时间。 3) 删除所有具有旧日期的行。

效果很好。

【讨论】:

    【解决方案2】:

    相反的情况如何?

    更新 tbl 设置 this = that where col = 'something'; 从 tbl 中删除 col != 'something';

    【讨论】:

      【解决方案3】:

      您可以在表中有一个时间戳列。所有更新的行都将具有当前时间戳。然后您可以运行删除查询,选择时间戳小于更新表时的大致时间的所有行。虽然不是一个完整的解决方案。

      另一种方法是在更新时设置一些列值,然后删除列值未更新的行

      【讨论】:

      • 要详细说明这一点,您可以有一个 int 字段:updated,然后 UPDATE table SET updated=0; UPDATE 表设置 new_values="", updated=1; DELETE FROM table WHERE updated=0;
      【解决方案4】:

      没有。存储 PK 并在删除后使用 NOT IN。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-10-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多