MySQL UPDATE vs INSERT和DELETE

时间:2011-01-31 18:58:56

标签: mysql sql-update

我正在开发一个Web应用程序项目,并且有一个相当大的html表单,需要将其数据存储在表中。表单和插入已经完成,但我的客户希望能够将保存的数据加载回HTML表单并能够更改它,再次,这没有问题,但我在进行更新时遇到了一个问题,如果只是保留插入查询,然后删除旧行(如果它是编辑?)是否合适?

基本上,已经发生的事情是在提交表单时使用INSERT将所有数据放入表中,如果数据是针对正在更新的现有字段,我还有一个名为edit的标志,其中包含主键ID。我可以通过两种方式处理更新功能:

a)创建包含所有字段/数据集的实际更新查询,并使用if / else来决定是运行更新还是插入查询。

b)每次插入,但在插入成功后向DELETE WHERE row = editID添加一行。

由于删除只会在INSERT成功的情况下发生,我不会冒没有插入而删除数据的风险,从而丢失数据,但由于INSERT / DELETE是两个查询,它的效率会低于仅仅使用if / else决定是否运行插入或更新?

还有第二个表使用自动增量ID作为外键,但每次提交表单时都必须更新此表,因此如果我删除表A中的行,我也将删除表b中的相关行。这似乎是糟糕的编程习惯,所以无论如何我倾向于选项a)但是使用单行选项非常诱人。 DELETE基本上如下。这实际上是不好的编程习惯吗?除了惯例之外,还有任何理由说明这是“从不这样做!”代码类型?

    if ($insertFormResults) {
        $formId = mysql_insert_id();
        echo "Your form was saved successfully.";
        if(isset($_POST['edit'])){
            $query = "DELETE FROM registerForm WHERE id='$_POST[edit]'";
            $result = mysql_query($query);
        }
    }

3 个答案:

答案 0 :(得分:4)

虽然INSERT / DELETE选项可以很好地工作,但我建议不要这样做:

  • 除非您捆绑INSERT / DELETE 单个交易,或 更好的是封装了 INSERT / DELETE进入存储 你运行理论的程序 累积重复的风险。如果 您使用的是SP或交易 只是有效地重写UPDATE 声明很明显 效率低下,而且会给 翘起一些WTF扬起眉毛 以后任何人维护你的 代码。
  • 虽然听起来不像 在你的情况下你是问题 可能影响参考 你应该需要诚信吗? 而且你正在失去了 相当有用的能力很容易 按创建顺序检索记录。
  • 可能不是很重要 一个小应用程序,但你是 最后会认真对待 碎片化数据库相当快 这会减慢数据检索速度。

答案 1 :(得分:0)

更新只是服务器的一次往返,效率更高。除非您有可能导致数据错误的原因,否则始终默认使用UPDATE。

答案 2 :(得分:0)

在我看来,删除操作毫无意义,如果你在MySql中运行更新,它只会更新记录,如果它与已经存储的内容不同,是否有一些原因需要你做删除。我通常使用一个case(switch)来捕获用户的更新/删除调用,

<?php
switch (action) {

case "delete" :
block of coding;
if the condition equals value1;
break;

case "edit" :
block of coding;
if the condition equals value2;
break;

}
?>