你知道mysql中空值和null值的区别吗

前言

最近发现带的小伙伴写sql对于空值的判断方法不正确,导致程序里面的数据产生错误,在此进行一下整理,方便大家以后正确的判断空值。以下带来示例给大家进行讲解。

建表

create table test (cola varchar(10) not null,colb varchar(10) null);

向test表中插入数据

插入cola为null的数据

insert into test values (null,1);

此时会报错,因为cola列不能为null。

插入colb为null的数据

insert into test values (1,null);

发现插入成功。

插入都为空的数据

insert into test values ('','');

插入cola为空的数据

insert into test values ('',null);

发现向cola一列插入空值成功,而colb列既可以插入空值,也可以插入null值。
总结一下,定义为not null的字段只能插入空值,不能插入null值,而null字段可以插入空值,也可以插入null值。

插入都不为空的数据

insert into test values (1,2);

开始查询

可以发现 is not null 只会过滤为null值的列,而<>会同时过滤空值和null值,所以要根据实际情况选择过滤方式。
另外,判断null值只能用 is null 或 is not null ,不能用 = 或 <>。

特别注意

1、在进行count()统计某列的记录数的时候,如果采用的null值,会别系统自动忽略掉,但是空值是会进行统计到其中的。

2、判断null 用is null 或者 is not null,sql 语句函数中可以使用ifnull()函数来进行处理,判断空字符用 = 或者 <> 来进行处理

3、对于mysql特殊的注意事项,对于timestamp数据类型,如果往这个数据类型插入的列插入null值,则出现的值是当前系统时间。插入空值,则会出现 ‘0000-00-00 00:00:00'

4、对于空值的判断到底是使用is null 还是 = 要根据实际业务来进行区分。

5、当使用order by时,首先呈现null值。如果你用desc以降序排序,null值最后显示。当使用group by时,所有的null值被认为是相等的,故只显示一行。

总结

到此这篇关于mysql中空值和null值的区别的文章就介绍到这了,更多相关mysql空值和null值的区别内容请搜索以前的文章或继续浏览下面的相关文章希望大家以后多多支持!

相关推荐:

NumPy深拷贝浅拷贝区别_视图(View)与arr.copy()完全复制内存区分

view()不分配新内存而共享数据缓冲区,故修改视图即修改原数组;copy()分配新内存实现一层深拷贝,但object数组需deepcopy才彻底隔离。 为什么arr.view()修改原数组? 因为view()不分配新内存,只是换了个“眼镜”看同一块内存。它共享数据缓冲区(arr.data),改视图...

Python异步编程里为何要用ensure_future_对比create_task区别

create_task是推荐的、明确“立刻调度协程”的方式;ensure_future是底层通用工具,用于确保任意可等待对象具备Future接口,不专为协程设计,也不保证调度。 ensure_future和create_task本质都是把协程转成Task,但调用时机和语义不同 直接说结论:creat...

为什么Python 3中的input()不再像Python 2那样求值_理解安全输入与类型转换的区别

Python3的input()不再执行表达式求值,因设计者移除eval()调用以防止RCE风险;它仅返回字符串,需手动转换并处理异常,空输入或空白字符须预处理。 Python3的input()为什么不再执行表达式求值 因为设计者明确移除了eval()调用逻辑,避免用户输入任意代码导致的远程代码执行(...

为什么Python中的静态方法和类方法不同_区别使用staticmethod与classmethod

类方法和静态方法本质不同:类方法用@classmethod装饰,自动传入cls(实际调用者类),支持继承与多态;静态方法用@staticmethod装饰,无隐式参数,仅为命名空间归属,不感知类结构。 静态方法和类方法根本不是“换种写法而已”,它们在参数绑定、访问能力、继承行为上完全不同——选错一个,...