十三、细说NULL导致的神坑,让人防不胜防
当数据的值为NULL的时候,可能出现各种意想不到的效果,让人防不胜防,我们来看看NULL导致的各种神坑,如何避免?
一、比较运算符中使用NULL
任何值和NULL使用运算符(>、<、>=、<=、!=、<>)或者(in、not in、any/some、all)比较时,返回值都为NULL,NULL作为布尔值的时候,不为1也不为0。
二、IN、NOT IN和NULL比较
IN和NULL比较: 当IN和NULL比较时,无法查询出为NULL的记录。
NOT IN 和NULL比较: 当NOT IN 后面有NULL值时,不论什么情况下,整个sql的查询结果都为空。
三、EXISTS、NOT EXISTS和NULL比较
=不能比较NULL
四、判断NULL只能用IS NULL、IS NOT NULL
判断是否为空只能用IS NULL、IS NOT NULL。
五、聚合函数中NULL的坑
count(a)返回了2行记录,a字段为NULL的没有统计出来。
count(b)返回了1行记录,为NULL的2行记录没有统计出来。
count(*)可以统计所有数据,不论字段的数据是否为NULL。
select count(a) from test1 where a is null; --返回为0,说明如下:
count(字段)无法统计字段为NULL的值,count(*)可以统计值为null的行。
六、NULL不能作为主键的值
结论:当字段为主键的时候,字段会自动设置为not null。
看了上面这些还是比较晕,NULL的情况确实比较难以处理,容易出错,最有效的方法就是避免使用NULL。所以,强烈建议创建字段的时候字段不允许为NULL,设置一个默认值。
七、总结
NULL作为布尔值的时候,不为1也不为0
任何值和NULL使用运算符(>、<、>=、<=、!=、<>)或者(in、not in、any/some、all),返回值都为NULL
当IN和NULL比较时,无法查询出为NULL的记录
当NOT IN 后面有NULL值时,不论什么情况下,整个sql的查询结果都为空
判断是否为空只能用IS NULL、IS NOT NULL
count(字段)无法统计字段为NULL的值,count(*)可以统计值为null的行
当字段为主键的时候,字段会自动设置为not null
NULL导致的坑让人防不胜防,强烈建议创建字段的时候字段不允许为NULL,给个默认值
最新文章
- POJ 3422 Kaka&#39;s Matrix Travels
- IOS 设置导航栏全局样式
- CSS transition 过渡 详解
- struts.xml 配置详解
- hanio 塔和递规的理解。
- Echart 商业级数据图表
- HDU 1707
- UIButton上使用UIEdgeInsetsMake让title跟图片对齐
- 初探Linux进程管理机制
- CLR has been unable to transition from COM context for 60 seconds
- eclipse +cvs 的基本使用方法(一)
- 记JavaScript的入门学习(三)
- SPI驱动调试感悟
- [Swift]LeetCode30. 与所有单词相关联的字串 | Substring with Concatenation of All Words
- laravel 路由缓存
- matlab的conv2、imfilter、filter2
- wifidog源码分析 - wifidog原理
- Ubuntu 14.04 安装 Blender,并放桌面
- 【VB.NET】利用纯真IP数据库查询IP地址及信息
- vue view 表单验证正常逻辑
热门文章
- ES6深入浅出-4 迭代器与生成器-3.生成器 &; for...of
- How to Plan and Configure YARN and MapReduce 2 in HDP 2.0
- ABAP DEMO33 选择周的搜索帮助
- springboot 项目基本目录包结构
- HTTPS小结 、TSL、SSL
- Tools - 在线编译环境和工具汇总
- web端自动化——Selenium3+python自动化(3.7版本)-火狐62版本环境搭建
- logstash 6.6.0 读取nginx日志 插入到elasticsearch中
- docker 搭建私有 docker hub
- java当中JDBC当中请给出一个sql server的stored procedure例子