Mysql 中is null 和 =null 的区别
在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 的区别的更多相关文章
- Mysql中unique与primary约束的区别分析(转)
本文章来给大家介绍在mysql中unique与primary约束的区别分析,unique与primary是我们在创建mysql时常用的类型了,下面我来给大家介绍介绍. 定义了UNIQUE约束的字段 ...
- 万答#11,MySQL中char与varchar有什么区别
万答#11,MySQL中char与varchar有什么区别 1.实验场景 GreatSQL 8.0.25 InnoDB 2.实验测试 2.1 区别 参数 char varchar 长度是否可变 定长 ...
- MySql中的count、NULL和空串的区别
**1.count (1).count (*) 与 count (列名) 的区别** 表 count(1) count(*) count (列名) 作用 统计表中的所有的记录数 会统计表中的所有的记录 ...
- mysql中查询字段为null或者不为null的sql语句怎么写?
在mysql中,查询某字段为空时,切记不可用 = null,而是 is null,不为空则是 is not null select * from table where column is null; ...
- mysql中四种存储引擎的区别和选择
前言 数据库存储引擎是数据库底层软件组织,数据库管理系统(DBMS)使用数据引擎进行创建.查询.更新和删除数据.不同的存储引擎提供不同的存储机制.索引技巧.锁定水平等功能,使用不同的存储引擎,还可以 ...
- mysql中in和exists二者的区别和性能影响
mysql查询语句in和exists二者的区别和性能影响 还记得一次面试中被人问到in 和 exists的区别,当然只是草草做答,现在来做下分析. mysql中的in语句是把外表和内表作hash 连接 ...
- mysql中where和having子句的区别和具体用法
1.mysql中的where和having子句的区别 having的用法 having字句可以让我们筛选成组后的各种数据,where字句在聚合前先筛选记录,也就是说作用在group by和having ...
- 正确理解MySQL中的where和having的区别
原文:https://blog.csdn.net/yexudengzhidao/article/details/54924471 以前在学校里学习过SQLserver数据库,发现学习的都是皮毛,今天以 ...
- mysql中 date datetime time timestamp 的区别
MySQL中关于时间的数据类型:它们分别是 date.datetime.time.timestamp.year date :"yyyy-mm-dd" 日期 1000-01 ...
- Mysql中的in和find_in_set的区别?
在mysql中in的使用情况如下: select * from article where 列名 in(值1,值2,值3.....): select * from article where 值1 i ...
随机推荐
- 转:PHP 5.4中的traits
原文来自于:http://www.cnblogs.com/thinksasa/archive/2013/05/16/3081247.html PHP 5.4中的traits,是新引入的特性,中文还真不 ...
- PLSQL 看连接数据库的用户
1. PLSQL选用SYSDBA登录,用户sys,密码xxx 2. 登录后,点tools菜单有sessions子菜单, 3.点击sessions子菜单,可以看到连接用户
- BZOJ 1028 麻将
Description 麻将是中国传统的娱乐工具之一.麻将牌的牌可以分为字牌(共有东.南.西.北.中.发.白七种)和序数牌(分为条子.饼子.万子三种花色,每种花色各有一到九的九种牌),每种牌各四张.在 ...
- Hibernate 配置详解(3)
7) hibernate.max_fetch_depth: 该属性用于设置left out join单对象查询关系(one-to-one/many-to-one)中最大的关联深度.默认值为0,即默认情 ...
- module_init和init_module的区别
今天在看CS8900的驱动时,发现其驱动的模块加载函数是init_module(),由于看到大多数的驱动用的模块加载函数大多是module_init()函数,所以一时没缓过神来,总是在找CS8900的 ...
- 线段树(区间维护):HDU 3308 LCIS
LCIS Time Limit: 6000/2000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submis ...
- 【索引】Android相关的
Eclipse开发环境 JDK的下载和安装:http://www.cnblogs.com/duxiuxing/p/4771901.html Android SDK的下载和安装:http://www.c ...
- 约瑟夫环问题-Java数组解决
约瑟夫环问题说的是,n个人围成一圈,从第k个人开始沿着一个方向报数,报到第m个人时,第m个人出列,从紧挨着的下一个人(未出列)开始,求整个环中人的出列顺序.下面是我用java实现的解决方法. clas ...
- 函数调用和给对象发消息(Runtime理解)
在写代码的时候这个差距其实是不打看的出得,很多时候也就无所谓叫什么,很多人为了便于理解,干脆就叫函数调用.这个其实应该是oc的一个特色,消息发送.具体的类typedef struct objc_cla ...
- Java 内省 Introspector
操纵类的属性,有两种方法 反射 内省 面向对象的编程中,对于用户提交过来的数据,要封装成一个javaBean,也就是对象 其中Bean的属性不是由字段来决定的,而是由get和Set方法来决定的 pub ...