在选择查询中使用星号

Res*_*had 0 mysql sql postgresql mysqli pdo

我听说很多都不使用*(星号),而是命名我需要的字段.是因为性能问题还是安全原因?有人可以为此说一些好的论点吗?

所以没有

SELECT * FROM users WHERE name='John';
Run Code Online (Sandbox Code Playgroud)

但反而

SELECT name FROM users WHERE name='John';
Run Code Online (Sandbox Code Playgroud)

das*_*ght 6

不在生产查询中使用星号的最大原因是将非SQL代码与数据库模式中的更改隔离开来,或者使这些更改更难以被忽视.

例如,如果您的代码使用星号name在第一列和address第二列中查询,则如果架构更改为在您正在阅读的两个列前面添加第三列,则代码将获取该新列名称,并将名称替换为地址.最糟糕的是它会在没有崩溃的情况下完成所有这些:用户只会看到垃圾数据.

相反,具有显式命名列的查询将在架构更改时获得正确的列,或者在已删除或重命名所需列时中断.这将立即指出问题的根源,使您可以轻松调查并解决问题.