mysql关于null值的使用

null值的处理是mysql经常被混淆的概念之一,也是查询中经常会犯迷糊的地方,做下简单整理以便日后查询:



自己理解的:

1:null值只能用is null ,is not null和ifnull()判断,不能进行任何比较运算,其他=,!=,in,not in...与null的比较都无任何数据返回


2:查询结果集中只有is null ,is not null会对列中的null做筛选,其他查询条件只对列中的非null值进行比较和过滤(此时此列中null值所在的行可以说不存在)


3:我们应该把null理解为一种特殊字符,它既不是空值('')也不是实值,它就是null



网上知识总结:
1:NULL值在与任何其他值甚至NULL值比较时总是假的(FALSE);


2:包含NULL的一个表达式总是产生一个NULL值;(SELECT NULL,1+NULL,CONCAT('Invisible',NULL);)


3:B树索引是不会存储NULL值的,所以如果索引的字段可以为NULL,索引的效率会下降很多


4:order by sname 或order by sname asc 时null显示在开头,order by sname desc时null显示在末尾


5:当使用GROUP BY时,所有的NULL值被认为是相等的(显示在开头)


6:null和''的区别
6.1:null和''是两个完全不同的概念,''代表有值(空),就是''.null代表值是未知的(在数据库表中null用特殊字符保存)
6.2:''(空值)不占用存储空间,null是一个特殊字符,占用空间(在数据库表中null用特殊字符保存)


7:比如 select count(*) 和 select count(id),后者是不计算NULL值的。




建议:

1:所有列都定义为not null(null值要占用内存,''不占用内存,所以把存储的null值用''替换掉可以提升查询效率)


尽量避免NULL:应该指定列为NOT NULL,除非你想存储NULL。
在MySQL中,含有空值的列很难进行查询优化,而且对表索引时不会存储NULL值的,所以如果索引的字段可以为NULL,索引的效率会下降很多。
因为它们使得索引、索引的统计信息以及比较运算更加复杂。你应该用0、一个特殊的值或者一个空串代替空值。


参考博客:
http://blog.csdn.net/fwkjdaghappy1/article/details/7703974/
https://www.cnblogs.com/weiyi1314/p/6489236.html


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值