SQL:在所有字段或多个查询中插入1个查询?

时间:2009-11-25 14:57:38

标签: php sql mysql insert

所以我对PHP页面在表中插入新行的最佳实践有疑问。有一些必填字段(aka NOT NULL)和一些可选字段(可以是NULL)。是否更好地使用一个查询插入所有内容,或者只是执行必填字段,获取插入的ID并使用一个或多个其他查询更新其他字段?

如果我使用where <primary key> = "x"进行多次更新,会有很大的性能影响吗?或者更好的做多个更新,以便如果其中一个可选更新不起作用,其余的更新?

3 个答案:

答案 0 :(得分:6)

通常,您应该使用所有值执行单个INSERT。这在数据库处理方面会更便宜,但同样重要的是(或者更多)它会使您的应用程序代码更加简单。

我不确定为什么替代方案甚至会发生在您身上,但它让我觉得可能有一些应用程序特定的原因您认为某些子列值将被拒绝。如果是这样,请告诉您更多关于您的具体情况。

答案 1 :(得分:1)

我会使用一个查询有两个原因:

  1. 每次调用数据库都会增加应用程序的开销。如果你只是做了一次更新,就这样做了。
  2. 如果您使用单独的呼叫,则可能有人试图在更新之间查看数据并看到“不完整”的数据。

答案 2 :(得分:0)

对于单行,您应该真正做一个INSERT。如果担心列值无效,则应在应用程序层中更加强调在进行INSERT之前验证代码(数据类型,数据长度等)。

您可以通过这种方式获得更全面的代码,同时对应用服务器,数据库服务器和网络的影响更小。