你知道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值的区别内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • MySQL命令行中给表添加一个字段(字段名、是否为空、默认值)

    先看一下最简单的例子,在test中,添加一个字段,字段名为birth,类型为date类型. mysql> alter table test add column birth date; Query OK, 0 rows affected (0.36 sec) Records: 0  Duplicates: 0  Warnings: 0 查询一下数据,看看结果: mysql> select * from test; +------+--------+-----------------------

  • 区分MySQL中的空值(null)和空字符('')

    日常开发中,一般都会涉及到数据库增删改查,那么不可避免会遇到Mysql中的NULL和空字符. 空字符('')和空值(null)表面上看都是空,其实存在一些差异: 定义: 空值(NULL)的长度是NULL,不确定占用了多少存储空间,但是占用存储空间的 空字符串('')的长度是0,是不占用空间的 通俗的讲: 空字符串('')就像是一个真空转态杯子,什么都没有. 空值(NULL)就像是一个装满空气的杯子,含有东西. 二者虽然看起来都是空的.透明的,但是有着本质的区别. 区别: 在进行count()统计

  • MySQL null与not null和null与空值''''的区别详解

    相信很多用了MySQL很久的人,对这两个字段属性的概念还不是很清楚,一般会有以下疑问: 我字段类型是not null,为什么我可以插入空值 为毛not null的效率比null高 判断字段不为空的时候,到底要 select * from table where column <> '' 还是要用 select * from table wherecolumn is not null 呢. 带着上面几个疑问,我们来深入研究一下null 和 not null 到底有什么不一样. 首先,我们要搞清楚

  • 你知道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的数据

  • MySQL中空值Null和空字符‘‘的具体使用

    目录 1. 空值 Null 和空字符 '' 2. 空值 Null 和空字符 '' 在查询方式上的对比 2.1. 创建 SQL 脚本 2.2. 查询 username 列为空字符串 '' 的所有数据 2.3. 查询 username 列为空值 null 的所有数据 2.4. 查询 username 列不为空值 null 的所有数据 3. 空值 Null 和空字符 '' 在 count() 函数查询的对比 3.1. 查询 username 列数据总数 4. MySQL 中的比较运算符 1. 空值 N

  • Mysql中 unique列插入重复值该怎么解决呢

    当unique列在一个UNIQUE键上插入包含重复值的记录时,我们可以控制MySQL如何处理这种情况:使用IGNORE关键字或者ON DUPLICATE KEY UPDATE子句跳过INSERT.中断操作或者更新旧记录为新值. mysql> create table menus(id tinyint(4) not null auto_increment, -> label varchar(10) null,url varchar(20) null,unique key(id)); Query

  • MySQL中varchar和char类型的区别

    目录 前述 VARCHAR类型 VARCHAR适用情况 CHAR类型 测试 VARCHAR(5)与VARCHAR(200)的区别 总结 前述 VARCHAR和CHAR是两种最主要的字符串类型.不幸的是,很难精确地解释这些值是怎么存储在磁盘和内存中的,因为这跟存储引擎的具体实现有关.下面的描述假设使用的存储引擎是InnoDB和/或者MyISAM.如果使用的不是这两种存储引擎,请参考所使用的存储引擎的文档. 先看看VARCHAR和CHAR值通常在磁盘上怎么存储.请注意,存储引擎存储CHAR或者VAR

  • mysql中redo log和 binlog的区别

    想跟大家聊聊关于 mysql 中的两个小的知识点:redo log 和 binlog . redo log :InnoDB 存储引擎层方面的日志,所以如果你使用的存储引擎不是 InnoDB 的话,那就根本谈不上 redo log. binlog : MySQL Server 层记录的日志,所以不管是用的什么存储引擎,只要是 MySQL 都是会有 binlog 的存在,在做 MySQL 主从复制的时候,利用的就是 binlog. 接下来,我们就详细来看看它们都分别做了啥? redo log 为什么

  • 在SQL中该如何处理NULL值

    在日常使用数据库时,你在意过NULL值么? 其实,NULL值在数据库中是一个很特殊且有趣的存在,下面我们一起来看看吧: 小伙伴想精准查找自己想看的MySQL文章?喏 → MySQL专栏目录 | 点击这里 在查询数据库时,如果你想知道一个列(例如:用户注册年限 USER_AGE)是否为 NULL,SQL 查询语句该怎么写呢? 是这样: SELECT * FROM TABLE WHERE USER_AGE = NULL 还是这样? SELECT * FROM TABLE WHERE USER_AGE

  • MySQL中冗余和重复索引的区别说明

    MySQL允许在单个列上创建多个索引,无论是有意还是无意,MySQL需要单独维护这些重复索引,优化器在优化查询时也需要逐个考虑这会影响MySQL的性能 概念阐述 重复索引: 在相同的列上按照相同的顺序创建的相同类型的索引.应该避免创建这样的重复索引,发现之后也应该立即移除. 冗余索引: 两个索引按照相同的顺序覆盖了相同的列. 创建的原因 一般来说,我们有时候会在不经意间创建了重复索引,例如下面的例子: CREATE TABLE test( ID INT NOT NULL PRIMARY KEY,

  • 一文弄懂MySQL中redo log与binlog的区别

    目录 前言 1. 什么是redo log? 1.1 redo日志文件名 1.2 影响redo log参数 1.3 redo log大小怎么设置? 2. 什么是binlog 2.1 binlog文件名 2.2 影响binlog的参数 2.3 查看binlog 3. redo log与binlog的区别 总结 前言 MySQL中有六种日志文件,分别是:重做日志(redo log).回滚日志(undo log).二进制日志(binlog).错误日志(errorlog).慢查询日志(slow query

  • mysql中TINYINT的取值范围

    在MySQL的数据类型中,Tinyint的取值范围是:带符号的范围是-128到127.无符号的范围是0到255(见官方<MySQL 5.1参考手册>http://dev.mysql.com/doc/refman/5.1/zh/column-types.html#numeric-types). Tinyint占用1字节的存储空间,即8位(bit).那么Tinyint的取值范围怎么来的呢?我们先看无符号的情况.无符号的最小值即全部8位(bit)都为0,换算成十进制就是0,所以无符号的Tinyint

  • asp.net中DBNull.Value,null,String.Empty区别浅析

    首先,"null"是C#中(VB.NET为Nothing),表示某个引用对象变量"未引用"任何实体时候的状况(典型症状是如果调用这个变量的某个方法,会抛出NullException之类的异常). String.Empty是一个静态的公共变量,表示某String变量不包含任何字符(等同于"").不过从性能上说,用String.Empty比声明用一个""好一些--显然地,前者是String类的静态变量,无论如何使用只产生一个实例,

随机推荐