我理解一般来说在SQL中使用SELECT *是个坏主意。有没有例外情况?谢谢!
答案 0 :(得分:7)
当您需要每个列时,包括当前和未来,考虑到可能会添加或删除一些
。通常情况下,只有完全需要数据库信息的工具才会出现这种情况,例如架构列表,或者如果您正在进行分析以尝试找出您需要的信息实际存在的位置。
“真正的”应用程序几乎不需要 ,它应该只知道并询问他们需要什么。
你不希望你的应用程序陷入尖叫堆只是因为数据库的其他一些用户决定他们需要在每一行中添加42个2GB BLOB列: - )
答案 1 :(得分:0)
通常情况下,只有在您移动大量数据时才会这么做,因为这样您的吞吐量就会大大增加。
我在频率上使用它,因为就你的应用程序原型而言,它使ALTERing表变得无痛。
就处理而言,由于MySQL的性质,它无关紧要。
所以不要担心。
答案 2 :(得分:0)
如果使用它的代码能够自动提取列名并随后映射所有名称以便在您的应用程序中进一步使用,则可以使用SELECT *
。
但是,这通常是一个坏主意,因为它可能很容易假设您要检索的列的位置(取决于您使用的数据库API,它可能是基于索引而不是名称基)。为了便于阅读,明确记下要检索的内容通常也会更好。
使用SELECT *
时可能会出现一些问题:
SUM(...)
或其他操作),AS
子句的连接或视图/ CTE)。 Java ResultSet
对名称进行了以下说明:
可以使用列的索引号或值来检索值 列的名称。通常,使用列索引将是 效率更高。
[...]
使用列名和多个列调用getter方法时 具有相同的名称,第一个匹配列的值将是 回。列名称选项旨在用于列 名称用于生成结果集的SQL查询中。对于 在查询中未明确命名的列,最好使用 列号。如果使用列名,程序员应该采用 注意保证它们唯一地引用预期的列, 这可以通过SQL AS子句得到保证。