【发布时间】:2011-01-31 18:58:55
【问题描述】:
我正在开发一个 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);
}
}
【问题讨论】:
-
MySQL's LAST_INSERT_ID 将为您提供自动增量值,然后您可以在 UPDATE 语句中使用该值。除了影响参照完整性之外,删除还会不必要地增加自动增量值。
标签: mysql sql-update