在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。

Mysql 中is null 和 =null 的区别的更多相关文章

  1. Mysql中unique与primary约束的区别分析(转)

    本文章来给大家介绍在mysql中unique与primary约束的区别分析,unique与primary是我们在创建mysql时常用的类型了,下面我来给大家介绍介绍.   定义了UNIQUE约束的字段 ...

  2. 万答#11,MySQL中char与varchar有什么区别

    万答#11,MySQL中char与varchar有什么区别 1.实验场景 GreatSQL 8.0.25 InnoDB 2.实验测试 2.1 区别 参数 char varchar 长度是否可变 定长 ...

  3. MySql中的count、NULL和空串的区别

    **1.count (1).count (*) 与 count (列名) 的区别** 表 count(1) count(*) count (列名) 作用 统计表中的所有的记录数 会统计表中的所有的记录 ...

  4. mysql中查询字段为null或者不为null的sql语句怎么写?

    在mysql中,查询某字段为空时,切记不可用 = null,而是 is null,不为空则是 is not null select * from table where column is null; ...

  5. mysql中四种存储引擎的区别和选择

    前言 数据库存储引擎是数据库底层软件组织,数据库管理系统(DBMS)使用数据引擎进行创建.查询.更新和删除数据.不同的存储引擎提供不同的存储机制.索引技巧.锁定水平等功能,使用不同的存储引擎,还可以 ...

  6. mysql中in和exists二者的区别和性能影响

    mysql查询语句in和exists二者的区别和性能影响 还记得一次面试中被人问到in 和 exists的区别,当然只是草草做答,现在来做下分析. mysql中的in语句是把外表和内表作hash 连接 ...

  7. mysql中where和having子句的区别和具体用法

    1.mysql中的where和having子句的区别 having的用法 having字句可以让我们筛选成组后的各种数据,where字句在聚合前先筛选记录,也就是说作用在group by和having ...

  8. 正确理解MySQL中的where和having的区别

    原文:https://blog.csdn.net/yexudengzhidao/article/details/54924471 以前在学校里学习过SQLserver数据库,发现学习的都是皮毛,今天以 ...

  9. mysql中 date datetime time timestamp 的区别

    MySQL中关于时间的数据类型:它们分别是 date.datetime.time.timestamp.year date :"yyyy-mm-dd"  日期     1000-01 ...

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

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

随机推荐

  1. linux中用户信息及密码相关知识

    在linux中若修改用户信息.密码,组群信息.密码等.其实是在修改/etc/passwd,/etc/shadow,/etc/group,/etc/groupshadow等文件的内容. 这四个文件的意思 ...

  2. How Much Did It Rain? Winner's Interview: 1st place, Devin Anzelmo

    How Much Did It Rain? Winner's Interview: 1st place, Devin Anzelmo An early insight into the importa ...

  3. Android 安装过程中的问题

    Android  安装过程中的问题 上一篇我说到配置android环境,但是在具体的安装过程中,因为下载的软件或者方法不同,导致没有正确的结果,如果有一些错误的时候,可以试一试关闭eclipse软件, ...

  4. Oracle预估的基数算法

    SQL> create table t as select * from dba_objects; Table created. SQL> create index idx_t on t( ...

  5. Gold Balanced Lineup(哈希表)

    Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 10711   Accepted: 3182 Description Farm ...

  6. Redis Sentinel实现Failover

    redis版本:2.8.17   服务器规划: 10.50.13.34(6379 master) 10.50.13.35(6379 slave) 10.50.13.36(6379 slave) 10. ...

  7. (转载)PCNTL函数族--PHP多进程编程

    (转载)http://www.cnblogs.com/zox2011/archive/2013/02/19/2917448.html php有一组进程控制函数,使得php能在*nix系统中实现跟c一样 ...

  8. [github] 创建个人网页

    创建 github.io 的个人子域名网页,其实非常简单,只需要两步: 1)创建名为 username.github.io 的代码仓库 2)把网页代码上传到代码库中 在 username.github ...

  9. [转]sleep和wait的区别

    http://www.cnblogs.com/plmnko/archive/2010/10/15/1851854.html from:http://nneverwei.javaeye.com/blog ...

  10. Openstack Ceilometer监控项扩展

    Openstack ceilometer主要用于监控虚拟机.服务(glance.image.network等)和事件.虚拟机的监控项主要包括CPU.磁盘.网络.instance.本文在现有监控项的基础 ...