新建测试表
CREATE TABLE `tab_3` (
`id` int(11) NOT NULL,
`fid` int(11) DEFAULT NULL,
`name` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
三个字段,其中一条数据的fid为null
现在执行sql语句:SELECT * from tab_3 where fid not in('12','16')
仅仅看sql语句的where条件是不包含[fid] 12和16的数据,但最终结果id为3的数据也没有查询到。
这是为什么?
因为fid字段为null
所以我们在开发过程中要注意这个坑。字段尽量使用not null,增加缺省值,除非你想储存null,储存空值的列很难优化,而且会影响到索引