MySQL的空值和NULL区别

从本质上区别:

1、空值不占空间

2、null值占空间

通俗的讲:

空值就像是一个真空转态杯子,什么都没有,而null值就是一个装满空气的杯子,虽然看起来都是一样的,但是有着本质的区别。

例子:

创建一个test表,colA是不可以存放null值的,colB是能存放null值的。

1 CREATE TABLE `test` (
2   `colA` varchar(255) NOT NULL,
3   `colB` varchar(255) DEFAULT NULL
4 ) ENGINE=InnoDB DEFAULT CHARSET=utf8;

插入一个null值试试,会发生什么情况?

1 INSERT INTO `test`(`colA`, `colB`) VALUES (NULL, NULL);

//出现报错,原因是colA是不能插入null值。

那么如果两个字段同时插入空值,会怎么样。

1 INSERT INTO `test`(`colA`, `colB`) VALUES (‘‘, ‘‘);

插入成功,说明字段即使设置为null值的时候,是可以插入空值的

---------------------------------------------------------------查询---------------------------------------------------------

现在表里有三条数据

接下来我们使用 is not null 和 <> 检索数据表里的数据

1、使用IS NOT NULL 的查询

1 SELECT * FROM `test` WHERE colA IS NOT NULL

1 SELECT * FROM `test` WHERE colB IS NOT NULL

结论:使用 IS NOT NULL 查询不会过滤空值,但是会过滤掉NULL。

2、使用 <> 的查询

1 SELECT * FROM `test` WHERE colA <> ‘‘;

1 SELECT * FROM `test` WHERE colA <> ‘‘;

结论:使用 <> 会过滤掉NULL和空值。

3、使用 count 查询

1 SELECT COUNT(colA) FROM `test`;

1 SELECT COUNT(colB) FROM `test`;

结论:使用 count 会过滤掉 NULL 值,但是不会过滤掉空值。

总结

1、空值不占空间,NULL值占空间(占用一个字节)。

2、当字段不为NULL时,也可以插入空值。

3、当使用 IS NOT NULL 或者 IS NULL 时,只能查出字段中没有不为NULL的或者为 NULL 的,不能查出空值。

4、使用 <> 查询时,会筛选掉空值和NULL值。

5、使用 count 统计时会过滤掉 NULL 值,但是不会过滤掉空值。

原文地址:https://www.cnblogs.com/dbhui/p/10366557.html

时间: 2024-10-10 01:58:55

MySQL的空值和NULL区别的相关文章

SQL中空值与NULL区别

很多人都有过这样的问题吧   在SQL中填充空值与NULL有什么区别 现在我以一个实例给大家分享一下自己的想法  恳请大家给予批评也指正 谢谢 创建一个监时表 CREATE TABLE #temp ( name VARCHAR(50) ) 填充三条资料 如下: INSERT INTO #tempVALUES ( NULL )INSERT INTO #tempVALUES ( 'Tom' )INSERT INTO #tempVALUES ( '' ) 使用如下语法查询 SELECT COUNT(n

【MySQL】探究之null与not null

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

数据库oracle与mysql在语法上的区别

转自http://blog.csdn.net/huanghm88/article/details/8009048 数据库oracle与mysql在语法上的区别不是很多,但是也有一些.下面是部分参考: 1,oracle没有offet,limit,在mysql中我们用它们来控制显示的行数,最多的是分页了.oracle要分页的话,要换成rownum. 2,oracle建表时,没有auto_increment,所有要想让表的一个字段自增,要自己添加序列,插入时,把序列的值,插入进去. 3,oracle有

Mysql中FIND_IN_SET()和IN区别简析

来源:http://www.jb51.net/article/125744.htm 测试SQL: CREATE TABLE `test` ( `id` int(8) NOT NULL auto_increment, `name` varchar(255) NOT NULL, `list` varchar(255) NOT NULL, PRIMARY KEY (`id`) ) INSERT INTO `test` VALUES (1, 'name', 'daodao,xiaohu,xiaoqin'

SQLserver 转换Mysql 一些语法使用的区别

1.存储过程的语法各式eg:DELIMITER $$ CREATE PROCEDURE test_p_add9( p_name VARCHAR(100), p_test VARCHAR(100), p_age INT, OUT o_newid INT) BEGIN INSERT INTO table_test (f_name,f_test,f_age,f_date) VALUES (p_name,p_test,p_age,NOW()); SET o_newid=LAST_INSERT_ID();

MYSQL和ORACLE的一些区别

原文:http://www.cnblogs.com/wujin/archive/2012/02/02/2336055.html 有很多应用项目, 刚起步的时候用MYSQL数据库基本上能实现各种功能需求,随着应用用户的增多,数据量的增加,MYSQL渐渐地出现不堪重负的情况:连接很慢甚至宕机,于是就有把数据从MYSQL迁到ORACLE的需求,应用程序也要相应做一些修改.总结出以下几点注意事项. 1. 自动增长的数据类型处理          MYSQL有自动增长的数据类型,插入记录时不用操作此字段,

[转]MySQL数据库引擎介绍、区别、创建和性能测试的深入分析

本篇文章是对MySQL数据库引擎介绍.区别.创建和性能测试进行了详细的分析介绍,需要的朋友参考下 数据库引擎介绍 MySQL数据库引擎取决于MySQL在安装的时候是如何被编译的.要添加一个新的引擎,就必须重新编译MYSQL.在缺省情况下,MYSQL支持三个引擎:ISAM.MYISAM和HEAP.另外两种类型INNODB和BERKLEY(BDB),也常常可以使用.如果技术高超,还可以使用MySQL+API自己做一个引擎.下面介绍几种数据库引擎:  ISAM:ISAM是一个定义明确且历经时间考验的数

C#空值和null判断

一.空值判断效率 string s = ""; if(s == ""){} if(s == string.Empty){} if (string.IsNullOrEmpty(s)) {} if(s != null && s.Length ==0) {} if((s+"").Length == 0){} 1,2最慢:3较快:4,5最快 1,2几乎没区别:4,5几乎没区别 二.空值和null判断 if (string.IsNullOr

MySQL中varchar与char区别

MySQL中varchar与char区别(转) MySQL中varchar最大长度是多少? 一. varchar存储规则: 4.0版本以下,varchar(20),指的是20字节,如果存放UTF8汉字时,只能存6个(每个汉字3字节) 5.0版本以上,varchar(20),指的是20字符,无论存放的是数字.字母还是UTF8汉字(每个汉字3字节),都可以存放20个,最大大小是65532字节 Mysql4中最大也不过是20个字节,但是Mysql5根据编码不同,存储大小也不同. 二. varchar和