首页
学习
活动
专区
圈层
工具
发布
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    MySQL的列名冲突陷阱:为什么SELECT a.id, a.*能运行,而SELECT id, *却报错?

    问题重现:两个相似的SQL,不同的命运 先来看两个具体的例子: -- SQL1: 这个可以正常运行 SELECT a.id, a.* FROM test1 a; -- SQL2: 这个会报错 SELECT...分析器负责解析SQL语句的结构,当它遇到SELECT id, * ...时,会这样分析: id:识别为一个列名 *:识别为所有列的简写,包括id列 结果:检测到列名冲突!...而当分析器遇到SELECT a.id, a.* ...时: a.id:识别为表a的id列 a.*:识别为表a的所有列 由于有别名限定,分析器认为这是明确的指令,不会将其视为错误 4....4.1 避免使用SELECT * 无论是从可读性还是性能角度,都强烈建议避免使用SELECT *,主要原因如下: 性能影响:SELECT *可能会查询不必要的列,增加网络传输和处理时间 可读性差:其他人无法直观看出查询返回哪些字段...小结 MySQL对SELECT a.id, a.*和SELECT id, *的不同处理,体现了数据库设计中的一个重要原则:明确性优于隐晦性。

    20810
    领券