选择所有列()
询问
SELECT * FROM stack;
结果
+------+----------+----------+
| `id` | username | password |
+------+----------+----------+
| 1 | admin | admin |
| 2 | stack | stack |
+------+----------+----------+
2 rows in set (0.00 sec)
你可以通过执行以下操作从联接中的一个表中选择所有列:
SELECT stack.* FROM stack JOIN Overflow ON stack.id = Overflow.id;
最佳实践除非你正在调试或将行提取到关联数组中,否则不要使用*
,否则架构更改(ADD / DROP /重排列)可能会导致令人讨厌的应用程序错误。此外,如果你在结果集中提供所需的列列表,MySQL 的查询计划程序通常可以优化查询。
优点:
- 添加/删除列时,你无需在使用
SELECT *
的位置进行更改 - 写的时间更短
- 你也看到了答案,那么
SELECT *
的用法是否合理?
缺点:
- 你返回的数据超出了你的需要。假设你添加每行包含 200k 的 VARBINARY 列。你只需要在一个地方为单个记录提供此数据 - 使用
SELECT *
你最终可以返回每 10 行不需要的 2MB - 明确使用什么数据
- 指定列意味着删除列时会出错
- 查询处理器必须做更多的工作 - 弄清楚表中存在哪些列(感谢 @vinodadhikary)
- 你可以更轻松地找到列的使用位置
- 如果使用 SELECT *,则会获得连接中的所有列
- 你无法安全地使用序数引用(尽管使用列的序数引用本身就是不好的做法)
- 在使用
TEXT
字段的复杂查询中,查询可能会因不太理想的临时表处理而变慢