NULL值的概念是造成SQL的新手的混淆的普遍原因,他们经常认为NULL是和一个空字符串''的一样的东西。不是这样的!例如,下列语句是完全不同的:

?12mysql>INSERT INTO my_table (phone)VALUES (NULL);mysql>INSERT INTO my_table (phone)VALUES ("");

两个语句把值插入到phone列,但是第一个插入一个NULL值而第二个插入一个空字符串。第一个的含义可以认为是“电话号码不知道”,而第二个则可意味着“她没有电话”。

在SQL中,NULL值在于任何其他值甚至NULL值比较时总是假的(FALSE)。包含NULL的一个表达式总是产生一个NULL值,除非在包含在表达式中的运算符和函数的文档中指出。在下列例子,所有的列返回NULL:

?1mysql>SELECT NULL,1+NULL,CONCAT('Invisible',NULL);

如果你想要寻找值是NULL的列,你不能使用=NULL测试。下列语句不返回任何行,因为对任何表达式,expr = NULL是假的:

?1mysql>SELECT *FROM my_tableWHERE phone =NULL;

要想寻找NULL值,你必须使用IS NULL测试。下例显示如何找出NULL电话号码和空的电话号码:

?12mysql>SELECT *FROM my_tableWHERE phoneIS NULL;mysql>SELECT *FROM my_tableWHERE phone ="";

在MySQL中,就像很多其他的SQL服务器一样,你不能索引可以有NULL值的列。你必须声明这样的列为NOT NULL,而且,你不能插入NULL到索引的列中。

当用LOAD DATA INFILE读取数据时,空列用''更新。如果你想要在一个列中有NULL值,你应该在文本文件中使用\N。字面上的词'NULL'也可以在某些情形下使用。

当使用ORDER BY时,首先呈现NULL值。如果你用DESC以降序排序,NULL值最后显示。当使用GROUP BY时,所有的NULL值被认为是相等的。

为了有助于NULL的处理,你能使用IS NULL和IS NOT NULL运算符和IFNULL()函数。

MySQL的 IFNULL() 函数和Oracle的 NVL() 函数功能类似。以下简单举例:

IFNULL(expr1, expr2)

如果expr1不是NULL,IFNULL()返回expr1,否则它返回expr2。IFNULL()返回一个数字或字符串值,取决于它被使用的上下文环境。

?1mysql>select IFNULL(1,0);-> 1mysql>select IFNULL(0,10);-> 0mysql>select IFNULL(1/0,10);-> 10mysql>select IFNULL(1/0,'yes');->'yes'NVL( string1, replace_with)

功能:如果string1为NULL,则NVL函数返回replace_with的值,否则返回string1的值。

引申一下,此NVL的作用与SQLserver 中的 ISNULL( string1, replace_with) 一样。

注意事项:string1和replace_with必须为同一数据类型,除非显式的使用TO_CHAR函数。

例:

?1NVL(TO_CHAR(numeric_column),'some string')

其中numeric_column代指某个数字类型的值。

例:

?1nvl(yanlei777,0) > 0

NVL(yanlei777, 0) 的意思是 如果 yanlei777 是NULL,则取 0值

null与空值的辨析来看这样一段代码:

?1234CREATE TABLE `test` (`col1`VARCHAR( 10 )CHARACTER SET utf8COLLATE utf8_general_ciNOT NULL ,`col2`VARCHAR( 10 )CHARACTER SET utf8COLLATE utf8_general_ciNULL) ENGINE = MYISAM ;

错误(不可以插入null值):

?1INSERT INTO `test`VALUES (null,1);

正确(插入''没问题):

?123INSERT INTO `test`VALUES ('',1);INSERT INTO `test`VALUES ('',NULL);INSERT INTO `test`VALUES ('1','2');

检索(''不是null,所以not null会把''都算进去):

?1SELECT *FROM `test`WHERE col1IS NOT NULL

结果:所有三条数据

检索(正常检索):

?1SELECT *FROM `test`WHERE col1 <>''

结果:最后一条数据

检索(<>'',会同时排除''和null的数据,只检索有内容的数据):

?1SELECT *FROM `test`WHERE col2<>''

总结:

1. null的存储不是'',是其它特殊的字符表示。

2. null在检索<>''的时候,也会被排除,因为没有真正有意义的内容

3. not null严格按照字面意思,''不会被排除。

4. 定义not null的字段,可以插入''

mysql null的作用_MySQL中对于NULL值的理解和使用教程相关推荐

  1. mysql is null走索引_mysql中IS NULL、IS NOT NULL不能走索引?

    不知道是啥原因也不知道啥时候, 江湖上流传着这么一个说法 mysql查询条件包含IS NULL.IS NOT NULL.!=.like %* .like %*%,不能使用索引查询,只能使用全表扫描. ...

  2. mysql is not null不生效_MySQL中IS NULL、IS NOT NULL、!=不能用索引?胡扯!

    转:https://mp.weixin.qq.com/s/CEJFsDBizdl0SvugGX7UmQ 不知道从什么时候开始,网上流传着这么一个说法: MySQL的WHERE子句中包含 IS NULL ...

  3. mysql where 1 作用_mysql中使用 where 1=1和 0=1 的作用

    操作mysql的時候,經常使用where語句進行查詢.當where語句不存在的時候,經常在后面加一個where 1=1 where 1=1; 這個條件始終為True,在不定數量查詢條件情況下,1=1可 ...

  4. mysql获取当月最后一天_mysql中获取本月第一天、本月最后一天、上月第一天、上月最后一天

    mysql获取当月最后一天_mysql中获取本月第一天.本月最后一天.上月第一天.上月最后一天等等 转自: https://blog.csdn.net/min996358312/article/det ...

  5. mysql null 0 空_MySQL中 null与not null和null与空值''的区别

    相信很多用了MySQL很久的人,对这两个字段属性的概念还不是很清楚,一般会有以下疑问: 1.字段类型是not null,为什么可以插入空值? 2.为什么not null的效率比null高? 3.判断字 ...

  6. mysql not null 索引_MySQL中 IS NULL、IS NOT NULL、!= 能用上索引吗?

    看面试题的时候,总能看到MySQL在什么情况下用不上索引,如下: MySQL的WHERE子句中包含 IS NULL.IS NOT NULL.!= 这些条件时便不能使用索引查询,只能使用全表扫描. 不耽 ...

  7. mysql null处理_MySQL中处理Null时要注意两大陷阱

    MySQL数据库是一个基于结构化数据的开源数据库.SQL语句是MySQL数据库中核心语言.不过在MySQL数据库中执行SQL语句,需要小心两个陷阱. 陷阱一:空值不一定为空 空值是一个比较特殊的字段. ...

  8. mysql 设置为空_MySQL中可为空的字段设置为NULL还是NOT NULL

    经常用mysql的人可能会遇到下面几种情况: 1.我字段类型是not null,为什么我可以插入空值 2.为什么not null的效率比null高 3.判断字段不为空的时候,到底要用 select * ...

  9. mysql中数据表null什么意思_MySQL 中NULL和空值的区别是什么?

    展开全部 空值是不占用空间的,MySQL中的NULL其实是占用空间的. 不过在MySQL数据库中执行62616964757a686964616fe78988e69d8331333363396466SQ ...

最新文章

  1. Data Protection Manager 2010 系列之安装部署
  2. 显示not_Excel函数06:逻辑函数之OR、NOT函数应用实例分析
  3. 20130828 到底我能赚多少钱?
  4. 【bzoj4940】这是我自己的发明
  5. Java基础Lambda表达式【四】
  6. 20200120每日一句
  7. Apache Wicket 1.5发布
  8. 豆瓣电影评论情感分析(含代码+数据)
  9. Visual Studio 2015 中文社区版下载
  10. RaiDrive添加坚果云
  11. 伤我最深,记得最真的句子:QQ伤感日志
  12. eMMC之分区管理、总线协议和工作模式【转】
  13. 废土艺术风格 2丨游戏主题概念设计
  14. 全球都在研发的虚拟气候设备,是治愈“失眠”的最优解吗?
  15. PL/0 语言简介、PL/0 文法
  16. strcmp函数实现及分析
  17. java精灵召唤_精灵召唤之梦游仙境
  18. dnf 国服 优化 服务器,DNF将开起新篇章?国服特色副本来临?网友: 先把网络卡顿优化了...
  19. DC初级摄友必学摄影技巧(转贴) 1
  20. linux批处理定时删除文件,forfiles命令,在Windows删除旧文件-批处理删除文件

热门文章

  1. 同济大学计算机直博,放弃直博浙江大学,选择保研同济大学!理性的他,做出这样的选择...
  2. Forrester 首席分析师对话阿里云容器服务负责人:容器的未来趋势是什么?
  3. 为什么 APP 纷纷开发“暗黑模式”?优酷最佳实践总结
  4. 计算机网络传输复用技术,计算机网络 23-24 复用技术 数字传输.ppt
  5. C#-多线程 126
  6. 从零点五开始用Unity做半个2D战棋小游戏(六)
  7. 十一级指针实现百万qq号的增删查改以及排序写入
  8. 专接本汇编开发工具【Masm for Winodws 集成实验环境】安装细则
  9. Azure人工智能认知服务(AI·机器学习)
  10. 这两款无“节操”的浏览器,在315被曝光后,终于被下架了