MySQL最佳实践

select为什么不能用*

2018-09-04  本文已影响231人  翁正存

CREATE TABLE `employees` (

  `employeeNumber` int(11) NOT NULL,

  `lastName` varchar(50) NOT NULL,

  `firstName` varchar(50) NOT NULL,

  `extension` varchar(10) NOT NULL,

  `email` varchar(100) NOT NULL,

  `officeCode` varchar(10) NOT NULL,

  `reportsTo` int(11) DEFAULT NULL,

  `jobTitle` varchar(50) NOT NULL,

  PRIMARY KEY (`employeeNumber`),

  KEY `reportsTo` (`reportsTo`),

  KEY `officeCode` (`officeCode`),

  CONSTRAINT `employees_ibfk_1` FOREIGN KEY (`reportsTo`) REFERENCES `employees` (`employeeNumber`),

  CONSTRAINT `employees_ibfk_2` FOREIGN KEY (`officeCode`) REFERENCES `offices` (`officeCode`)

) ENGINE=InnoDB DEFAULT CHARSET=latin1;

现在,我们有一个employees表,需要从employees表查全部字段信息,在生产环境,一定不要使用  SELECT * FROM employees;

而要罗列出所有要查询的字段,原因如下:

1.使用*会返回所有的字段,而有些字段你可能不会使用,这样就造成磁盘I/O和网络带宽的浪费。

2.明确罗列返回的字段,使查询结果可控、可维护,如果别的兄弟改了表结构,比如,加了几个字段,*返回的结果可能就不是你想要的结果了。

3.使用*会返回所有字段的信息,万一有些字段包含敏感信息,就可能造成敏感信息泄露给未授权的用户。

上一篇下一篇

猜你喜欢

热点阅读