在mysql中,筛选非空的时候经常会用到is not null和!=null,这两种方法单从字面上来看感觉是差不多的,其实如

果去运行一下试试的话差别会很大!

为什么会出现这种情况呢?

null 表示什么也不是, 不能=、>、< … 所有的判断,结果都是false,所有只能用 is null进行判断。
默认情况下,推荐使用 IS NOT NULL去判断,因为SQL默认情况下对!= Null的判断会永远返回0行,但没有语法错误


如果你一定想要使用!= Null来判断,需要加上这个语句:

set ANSI_NULLS off

这时你会发现IS NOT NULL 和 != null 是等效的

个字段如果设为“NULL”,表示如果这个字段的值为空时,自动插入一个“NULL”值。

一个字段如果设为“NOT NULL”,表示如果这个字段的值为空时,不自动插入“NULL”值(任其无值)。

所以,设为“NULL”的意思反而是“不能无值”(由MYSQL自动赋“NULL”值),而设为“NOT NULL”是“可以无值”

其实要证明这一点很简单,建一个测试表,两个字段(VC型),一个设为“NULL”,一个设为“NOT NULL”,两个都

插入空值,看看结果就明白了。

NULL 不是 '' 也不是 0。

你的字段定义为 not null,但是却赋值了一个 null,那么数据库系统会按照该字段类型选择一个默认的值放进去,

比如 char 就是用空字符串。
但注意,空字符串其实已经是一个确定的值了,就是一个长度为 0 的字符串!

至于 NULL 值,给你一个正确的理解:把 NULL 理解为 UNKNOWN。
主要意思是'不知道',就是它可能是任何值;
另外一层意思是'信息缺失',比如某个存储姓名信息的字段值是 NULL,代表姓名信息缺失。
所以 NULL 值不是任意一个确定的值!

举例来说,逻辑 与/或 运算会的吧?
与运算:true and true = true, true and false = false, false and true = false, false and false =

false
第一个 true and null,它的结果完全靠 null 确定。如果它是 true 结果就是 true,如果它是 false,结果就是

false。因为 null 代表不知道,所以结果也是不知道,所以是 null。

第二个 false and null,它的结果不需要靠 null 确定,因为 and 运算的特性,有 false 出 false,所以结果是

false。

第三个 null and null,就好理解了吧,它完全就是空对空了,两个操作数都是不知道,结果自然也是不知道,所以

是 null。

转载于:https://www.cnblogs.com/sunxun/p/4335108.html

Mysql 中is null 和 =null 的区别相关推荐

  1. mysql中from unixtime,mysql中FROM_UNIXTIME()和UNIX_TIMESTAMP()函数的区别

    摘要 腾兴网为您分享:mysql中FROM_UNIXTIME()和UNIX_TIMESTAMP()函数的区别,作业大师,智慧大学,优化大师,先游等软件知识,以及流星蝴蝶剑,升学指导网软件,承德大宗,q ...

  2. MySQL中B-tree索引和Hash索引区别

    在MySQL文档里,实际上是把B+树索引写成了BTREE,例如像下面这样的写法: CREATE TABLE t(aid int unsigned not null auto_increment,use ...

  3. mysql having in_正确理解MySQL中的where和having的区别

    以前在学校里学习过SQLserver数据库,发现学习的都是皮毛,今天以正确的姿态谈一下MySQL中where和having的区别. 误区:不要错误的认为having和group by 必须配合使用. ...

  4. MySQL中CONCAT和GROUP_CONCAT方法的区别

    例子表 CREATE TABLE `book` (`id` int(11) NOT NULL AUTO_INCREMENT,`book_name` varchar(255) CHARACTER SET ...

  5. MySQL中CREATE DATABASE和CREATE SCHEMA区别

    文章来源 https://blog.csdn.net/liyanlei5858/article/details/78984100 在使用MS SQL的时候,一般创建数据库我们都习惯于使用CREATE ...

  6. mysql where 与having_正确理解MySQL中的where和having的区别

    以前在学校里学习过SQLserver数据库,发现学习的都是皮毛,今天以正确的姿态谈一下MySQL中where和having的区别. 误区:不要错误的认为having和group by 必须配合使用. ...

  7. MySQL中CREATE DATABASE和CREATE SCHEMA区别(转)

    在使用MS SQL的时候,一般创建数据库我们都习惯于使用CREATE DATABASE 来完成,而使用CREATE SCHEMA来创建架构,但是在MySQL中,官方的中文文档在 CREATE DATA ...

  8. Mysql中的in和find_in_set的区别?

    在mysql中in的使用情况如下: select * from article where 列名 in(值1,值2,值3.....): select * from article where 值1 i ...

  9. Mysql中where和having用法及区别

    1.Mysql中Having和Where用法 当SQL语句中使用聚合函数,然后又需要对聚合函数的记录集进行筛选过滤时,这个时候就需要用到Having子句.如果是在聚合函数前过滤记录用Where,在聚合 ...

  10. MySQL中的 空值(null)和空字符(‘‘)

    目录 长度和判空 ifnull 字段定义为not null,查询的时候也可能返回null 建议 参考 空值(null)和空字符('')是两个比较容易混淆的概念. 本文对两者的区别做简单梳理. 长度和判 ...

最新文章

  1. 交通信号灯检测与行人过马路策略
  2. 让烦恼走开 两招让移动硬盘插拔自如
  3. 机智云5.0推出IoT套件GoKit4.0 可实现物联网应用协同开发
  4. [Codeforces741D]Arpa's letter-marked tree and Mehrdad's Dokhtar-kosh paths——dsu on tree
  5. 回首经典的SQL Server 2005
  6. Arduino学习笔记07
  7. 线程停止继续_线程不是你想中断就能中断
  8. Linux中安装开源JDK(windows的JDK只能安装半开源)
  9. 爬虫实例6 爬取联英人才网147页招聘信息,并导入数据库
  10. Java基础知识笔记整理(零基础学Java)
  11. pdf怎么转换成图片?
  12. 计算机无法打开pdf文件夹,计算机打开PDF文档时发生错误. 如何修复损坏的文件...
  13. SpringBoot+FreeMarker+flying-saucer-pdf实现PDF预览、分页需求
  14. python 乒乓球_python使用pygame实现笑脸乒乓球弹珠球游戏
  15. MATLAB找勾股数,一种寻找勾股数的方法
  16. java保存图片_java 保存图片
  17. Speedoffice 两个方法教你如何在Word文档中划线
  18. ABAP 针式打印机横向打印问题
  19. The server time zone value 'EDT' is unrecognized or represents more than one time zone.
  20. ArchiCAD与Revit深度对比

热门文章

  1. html5访问电脑或手机摄像头
  2. 利用DEDE正则批量查找替换数据库的自定义内容
  3. Flex的动画效果与变换(1)
  4. Mike Krueger 加入Mono团队
  5. java write 去bom_Java处理UTF-8带BOM的文本的读写
  6. 亚太数学建模竞赛优秀论文_全国大学生数学建模竞赛介绍
  7. java x509certificate2_ASP.NET使用X509Certificate2出现一系列问题的解决方法
  8. 3-31Pytorch与auto-variabletensor
  9. acm java 类库_ACM java入门和基本技巧
  10. mysql注入原理_Mysql报错注入原理分析