MySQL UPDATE vs INSERT和DELETE
我正在开发一个web应用程序项目,并且有一个相当大的html表单,需要将其数据存储在一个表中。表单和插入已完成,但我的客户希望能够将保存的数据加载回HTML表单,并且能够更改它,再次,这没有问题,但是当我要更新时遇到了一个问题,只要保持插入查询,然后删除旧行,如果它是一个编辑?MySQL UPDATE vs INSERT和DELETE
基本上,已经发生的情况是,当提交表单时,所有数据都使用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);
}
}
虽然INSERT/DELETE选项将很好地工作,我建议反对为:
- 除非您将INSERT/DELETE 整合到一个单独的事务中,或者更好地封装了INSERT/DELETE到存储的 过程中,您将运行理论上存在重复累积的 风险。如果 您使用SP或交易你 只是有效地重写UPDATE语句 这显然是低效 ,而且会给 引起一些WTF扬眉 后来有人维护你的代码 。
- 虽然它听起来不像 问题在您的情况下,您是 潜在影响参考 完整性,如果您需要。 此外,你失去了 相当有用的能力,以容易 检索创建顺序的记录。
- 也许不是一个伟大的考虑上 一个小应用程序,但你 要以认真 零碎的数据库很快 这将减慢数据检索结束。
这是我大学的新生入学指导的数据库,每年至少有1000个新入学条目,具体取决于入学班级的大小。我没有考虑到这种分裂,那肯定会导致问题的发生。 – awestover89 2011-01-31 19:32:40
更新只是一次往返服务器,这是更高效。除非您有一个涉及错误数据可能性的原因,否则始终默认使用UPDATE。
在我看来,做删除是毫无意义的,如果你在MySql中运行更新,它只会更新记录,如果它不同于已存储的记录,是否有某些原因需要删除代替。我通常使用的情况下(开关)来捕捉更新/从用户删除通话,
<?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;
}
?>
[MySQL的LAST_INSERT_ID](http://dev.mysql.com/doc/refman/5.0/en/getting-unique-id.html)会为您提供自动增量值,然后您可以在UPDATE语句。删除将无需运行自动增加值,除对参照完整性造成影响外。 – 2011-01-31 19:04:14