插入查询:为什么不包括列名是个坏主意



我在上一个职位上被告知永远不要这样做;原因没有解释。我知道这会增加出错的机会,但如果只有几列,并且我对它们的顺序有信心,为什么我不能简写它,只按正确的顺序插入值,而不显式地匹配列名呢?是否存在较大的性能差异?如果是的话,这在小范围内重要吗?

如果没有性能问题,而且这不是一个将保存给其他人查看的查询,为什么我不应该呢?

提前谢谢。

只有当您在交互式数据库工具中手动键入查询时,这才是可以接受的。当您的SQL语句由程序执行时,除非您是唯一有权访问数据库的开发人员,否则您不能对表中列的顺序绝对有信心。换句话说,在任何团队环境中,都有可能有人通过重新排列数据库中的列来破坏您的查询。从逻辑上讲,您的表将保持不变,但您的程序仍然会中断。

魔鬼的倡导者:如果只有几个列,那么短时间处理会给你带来什么好处?你节省了几个按键,大不了。

对于只写一次就扔掉的临时查询,这没什么大不了的。我怀疑您被告知永远不要在生产代码或任何其他人以后必须进行反向工程的东西中这样做(要么只是为了理解它,要么是为了说明底层模式的变化)。请记住,您编写的代码现在只能由您查看和维护,但您编写代码的目的应该是让它比您更持久。

包含列列表的另一个原因是,如果以后要在数据模型中搜索对特定列名的所有引用。。。

原因是为了使代码更加健壮。

指定字段可以减少代码对表布局保持完全相同的依赖,并且只要为新字段提供默认值,就可以向表中添加字段,而无需更改代码。

它还可以更容易地看到查询应该做什么,而不需要查找表布局来查看数据的最终位置。

在大多数开发商店中,您不会是唯一一个处理给定项目的开发人员。在这种情况下,您将面临意外插入的风险。你现在可能有信心,不会有任何模式的改变,事情可以改变。。。现在或者你走后。

此外,如果添加了列,则插入操作将失败。

它主要是为了可读性,所以如果只有你自己也没问题,但如果你确实打乱了顺序,如果人们发现你没有使用良好的实践,尤其是当有人在你写查询时修改了结构时,这可能很难解释。。。此外,如果你在一个列中有复杂的事情要做,它可以帮助可视化,如果你说它很小,那么添加几个列名几乎不会花很长时间,所以你也可以。

因为情况会发生变化,如果您在程序中编写查询代码,认为列顺序永远不会改变,然后其他人决定更改表并添加新列,那么您的查询将失败。

此外,如果您不想键入列名,还有一个快速技巧。在management studio中,您可以设置它,以便您的结果集以CSV(带列标题)返回。CTRL-T。

然后做一个快速

select top 1 * from <tablename>

并从结果集窗口复制和粘贴列列表。

关系没有从左到右的列排序。SQL表就不能这么说了,这不是一件好事。然而,SQL具有非关系特性并不意味着您必须使用它们!将列列表指定为表或行值构造函数的一部分是减少SQL列排序的一种方法。

考虑以下SQL语句在语义上是等效的:

INSERT INTO Table1 (col1, col2, col3) VALUES (1, 2, 3);
INSERT INTO Table1 (col2, col1, col3) VALUES (2, 1, 3);
INSERT INTO Table1 (col3, col2, col1) VALUES (3, 2, 1);

最新更新