【问题标题】:Is this a valid approach to updating这是一种有效的更新方法吗
【发布时间】:2011-05-12 11:18:32
【问题描述】:

我有一个包含多个组合框和文本框的长表单。

我正在使用此表单进行注册,我也使用相同类型的表单进行更新。

  1. 我使用INSERT查询完成了注册过程。
  2. 对于更新,我有一个想法。 不使用UPDATE查询,我应该先删除(DELETE)记录,然后再将其插入数据库,因为我已经完成了插入过程以进行注册,我可以重复使用代码。

这种方法有什么问题吗?

【问题讨论】:

    标签: php mysql html database


    【解决方案1】:

    在某些情况下(尤其是在批量数据移动作业等中),做这样的事情可能是有意义的。

    但在你的情况下,我真的看不出你有什么理由应该按照你的建议去做。

    除了为您节省微不足道的开发时间外,我从您的方法中看不到任何好处。不利的是,每次更新用户数据时,您的应用程序将执行 2 个 SQL 语句(DELETE + INSERT)而不是 1 个 UPDATE。根据您的应用程序的工作方式,您还需要一些其他逻辑来跟踪用户配置文件的更改,因为 dtCreated 等内容还不够。

    我会用一个简单的 UPDATE 语句代替。

    【讨论】:

    • 这取决于您存储 id 的方式。只要 ID 不是 auto_increment 列,我不明白您为什么不能这样做。
    • 如果我使用 DELETE+INSERT 方法,我怎样才能获得相同的 id。认为这是一个问题?
    【解决方案2】:

    您可以使用使用相同语法的REPLACE INTO 命令。在屏幕后面,它将执行DELETE,然后是INSERT。如果您使用InnoDB 表并且您已经设置了关系,如果您认为REPLACE INTO 将像UPDATE 一样工作,这可能会非常危险。结果,由于级联规则,一堆删除的行

    您考虑使用DELETE 后跟INSERT 进行更新,因为您已准备好插入sql。好吧,您可以使用 UPDATE 之类的语法进行插入。这样,只需根据您的任务使用 INSERT/UPDATE。

    所以而不是:

    INSERT INTO products (name) VALUES ('iPhone');
    

    .. 你会使用:

    INSERT INTO products SET name='iPhone';
    

    看起来和更新差不多:

    UPDATE products SET name='iPhone' WHERE id=1;
    

    几乎一样。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-01-24
      • 1970-01-01
      • 2012-08-12
      • 1970-01-01
      • 1970-01-01
      • 2014-11-21
      • 1970-01-01
      相关资源
      最近更新 更多