mysql null和空的区别怎么样把空值或null查询出来

文字链接:《》
文章地址:
除非标注,所有博文均为原创,转载请加文字链接注明来源
博客快成这样,嗖嗖嗖的感觉。
实用的功能
Recommendation详解MySQL中的NULL值
投稿:goldensun
字体:[ ] 类型:转载 时间:
这篇文章主要介绍了MySQL中的NULL值的相关知识,是MySQL入门学习中的基础知识,需要的朋友可以参考下
我们已经看到使用WHERE子句的SQL SELECT命令来从MySQL表获取数据。但是,当我们试图给的条件比较字段或列的值为NULL,它不能正常工作。
为了处理这种情况,MySQL提供了三大运算符
&&& IS NULL: 此运算符返回true,当列的值是NULL。
&&& IS NOT NULL: 运算符返回true,当列的值不是NULL。
&&& &=& 操作符比较值(不同于=运算符)为ture,即使两个NULL值
涉及NULL条件是特殊的。不能使用 =NULL 或 !=NULL 寻找NULL值的列。这种比较总是告诉他们是否是真正的失败,因为这是不可能的。即使是NULL=NULL失败。
如果要查找是或不是NULL的列,请使用IS NULL或IS NOT NULL。
在命令提示符下使用NULL值:
假设一个表tcount_tbl,它包含了两个的列stutorial_author和tutorial_count,其中一个tutorial_count为NULL 表示的值是未知的
试试下面的例子:
root@host# mysql -u root -
Enter password:*******
mysql& use TUTORIALS;
Database changed
mysql& create table tcount_tbl
-& tutorial_author varchar(40) NOT NULL,
-& tutorial_count INT
Query OK, 0 rows affected (0.05 sec)
mysql& INSERT INTO tcount_tbl
-& (tutorial_author, tutorial_count) values ('mahran', 20);
mysql& INSERT INTO tcount_tbl
-& (tutorial_author, tutorial_count) values ('mahnaz', NULL);
mysql& INSERT INTO tcount_tbl
-& (tutorial_author, tutorial_count) values ('Jen', NULL);
mysql& INSERT INTO tcount_tbl
-& (tutorial_author, tutorial_count) values ('Gill', 20);
mysql& SELECT * from tcount_
+-----------------+----------------+
| tutorial_author | tutorial_count |
+-----------------+----------------+
+-----------------+----------------+
4 rows in set (0.00 sec)
可以看到=和!=不使用NULL值,如下所示:
mysql& SELECT * FROM tcount_tbl WHERE tutorial_count = NULL;
Empty set (0.00 sec)
mysql& SELECT * FROM tcount_tbl WHERE tutorial_count != NULL;
Empty set (0.01 sec)
要找到,其中tutorial_count列是或不是NULL的记录,查询应该这样写:
mysql& SELECT * FROM tcount_tbl
-& WHERE tutorial_count IS NULL;
+-----------------+----------------+
| tutorial_author | tutorial_count |
+-----------------+----------------+
+-----------------+----------------+
2 rows in set (0.00 sec)
mysql& SELECT * from tcount_tbl
-& WHERE tutorial_count IS NOT NULL;
+-----------------+----------------+
| tutorial_author | tutorial_count |
+-----------------+----------------+
+-----------------+----------------+
2 rows in set (0.00 sec)
PHP脚本处理NULL值:
可以使用IF ... ELSE条件准备的基础上操作NULL值的查询。
下面的示例tutorial_count从外部,然后它与可在表中的值进行比较。
$dbhost = 'localhost:3036';
$dbuser = 'root';
$dbpass = 'rootpassword';
$conn = mysql_connect($dbhost, $dbuser, $dbpass);
if(! $conn )
die('Could not connect: ' . mysql_error());
if( isset($tutorial_count ))
$sql = 'SELECT tutorial_author, tutorial_count
FROM tcount_tbl
WHERE tutorial_count = $tutorial_count';
$sql = 'SELECT tutorial_author, tutorial_count
FROM tcount_tbl
WHERE tutorial_count IS $tutorial_count';
mysql_select_db('TUTORIALS');
$retval = mysql_query( $sql, $conn );
if(! $retval )
die('Could not get data: ' . mysql_error());
while($row = mysql_fetch_array($retval, MYSQL_ASSOC))
echo "Author:{$row['tutorial_author']} &br& ".
"Count: {$row['tutorial_count']} &br& ".
"--------------------------------&br&";
echo "Fetched data successfully\n";
mysql_close($conn);
您可能感兴趣的文章:
大家感兴趣的内容
12345678910
最近更新的内容
常用在线小工具当前位置:
MySQL&字段&NULL
本文介绍在MySQL中,面对值为空(NULL)的字段,应该如何查询。怎么判断一个字段的值为NULL或不为NULL?
本文介绍在MySQL中,面对值为空(NULL)的字段,应该如何查询。怎么判断一个字段的值为NULL或不为NULL?
现在我们先来把test表中的一条记录的birth字段设置为空。
mysql& update test set t_birth=null where t_id=1;
Query OK, 1 row affected (0.02 sec)
Rows matched: 1& Changed: 1& Warnings: 0
OK,执行成功!
设置一个字段值为空时的语法为:set &字段名&=NULL
说明一下,这里没有大小写的区分,可以是null,也可以是NULL。
下面看看结果:
mysql& select *
+------+--------+----------------------------------+------------+
| t_id | t_name | t_password&&&&&&&&&&&&&&&&&&&&&& | t_birth&&& |
+------+--------+----------------------------------+------------+
|&&& 1 | name1& |
| NULL&&&&&& |
|&&& 2 | name2& |
+------+--------+----------------------------------+------------+
2 rows in set (0.00 sec)
接下来分别查询一下字段t_birth值为空或不为空的记录:
mysql& select * from test where t_
+------+--------+----------------------------------+---------+
| t_id | t_name | t_password&&&&&&&&&&&&&&&&&&&&&& | t_birth |
+------+--------+----------------------------------+---------+
|&&& 1 | name1& |
| NULL&&& |
+------+--------+----------------------------------+---------+
1 row in set (0.00 sec)
mysql& select * from test where t_
+------+--------+----------------------------------+------------+
| t_id | t_name | t_password&&&&&&&&&&&&&&&&&&&&&& | t_birth&&& |
+------+--------+----------------------------------+------------+
|&&& 2 | name2& |
+------+--------+----------------------------------+------------+
1 row in set (0.00 sec)
1、查询字段值为空的语法:where &字段名& is null
2、查询字段值不为空的语法:where &字段名& is not null
关于MySQL查询空字段或非空字段(is null和not null),本文就介绍这么多,希望对大家有所帮助,谢谢!
文章的版权
洪哥写文章很苦逼,如果本文对您略有帮助,点击感兴趣的广告支持洪哥!万分感谢!本文属于“洪哥笔记”原创文章,转载请注明来源地址:
关注与收藏
如果您在服务器运维、网络管理、网站或系统开发过程中有任何疑问,洪哥以此为饭碗,请加QQ:!
了解更多好文章,请关注我们的新浪微博和腾讯微博
亲,先存起来,方便以后再看啊!加入收藏夹的话,按Ctrl+D!
&&( 8:03:36)
&&( 23:00:18)
&&( 23:00:47)
&&( 11:08:34)
&&( 9:28:09)
&&( 10:54:08)
&&( 12:06:25)
&&( 15:33:57)
&&( 13:51:15)
&&( 10:51:54)
热门点击文章
洪哥推荐文章
友情链接:mysql中的null值和空值区别,注意到null值是未知的,占用空间,并且不走索引;下面转载两篇文笔记之:
http://my.oschina.net/junn/blog/161769
相信很多用了mysql很久的人,对这两个字段属性的概念还不是很清楚,一般会有以下疑问:
1、我字段类型是not null,为什么我可以插入空值
2、为毛not null的效率比null高
3、判断字段不为空的时候,到底要 select * from table where column && && 还是要用 select * from table where column is not null 呢。
带着上面几个疑问,我们来深入研究一下null 和 not null 到底有什么不一样。
首先,我们要搞清楚“空值” 和 “NULL” 的概念:
1、空值是不占用空间的
2、mysql中的NULL其实是占用空间的,下面是来自于MYSQL官方的解释
“NULL columns require additional space in the row to record whether their values are NULL. For MyISAM tables, each NULL column takes one bit extra, rounded up to the nearest byte.”
打个比方来说,你有一个杯子,空值代表杯子是真空的,NULL代表杯子中装满了空气,虽然杯子看起来都是空的,但是区别是很大的。
搞清楚“空值”和“NULL”的概念之后,问题基本就明了了,我们搞个例子测试一下:
CREATE TABLE
`col1` VARCHAR( 10 ) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL ,
`col2` VARCHAR( 10 ) CHARACTER SET utf8 COLLATE utf8_general_ci NULL
) ENGINE = MYISAM ;
插入数据:
INSERT INTO `test` VALUES (null,1);
mysql发生错误:
#1048 - Column &col1& cannot be null
INSERT INTO `test` VALUES (&&,1);
成功插入。
可见,NOT NULL 的字段是不能插入“NULL”的,只能插入“空值”,上面的问题1也就有答案了。
对于问题2,上面我们已经说过了,NULL 其实并不是空值,而是要占用空间,所以mysql在进行比较的时候,NULL 会参与字段比较,所以对效率有一部分影响。
而且对表索引时不会存储NULL值的,所以如果索引的字段可以为NULL,索引的效率会下降很多。
我们再向test的表中插入几条数据:
INSERT INTO `test` VALUES (&&, NULL);
INSERT INTO `test` VALUES (&1&, &2&);
现在表中数据:
现在根据需求,我要统计test表中col1不为空的所有数据,我是该用“&& &&” 还是 “IS NOT NULL” 呢,让我们来看一下结果的区别。
SELECT * FROM `test` WHERE col1 IS NOT NULL
SELECT * FROM `test` WHERE col1 && &&
可以看到,结果迥然不同,所以我们一定要根据业务需求,搞清楚到底是要用那种搜索条件。
---------------------------------
http://blog.csdn.net/eroswang/article/details/8529817
Mysql数据库是一个基于结构化数据的开源数据库。SQL语句是MySQL数据库中核心语言。不过在MySQL数据库中执行SQL语句,需要小心两个陷阱。
  陷阱一:空值不一定为空
  空值是一个比较特殊的字段。在MySQL数据库中,在不同的情形下,空值往往代表不同的含义。这是MySQL数据库的一种特性。如在普通的字段中(字符型的数据),空值就是表示空值。但是如果将一个空值的数据插入到TimesTamp类型的字段中,空值就不一定为空。此时为出现什么情况呢
  我先创建了一个表。在这个表中有两个字段:User_id(其数据类型是int)、Date(其数据类型是TimesTamp)。现在往这个表中插入一条记录,其中往Date字段中插入的是一个NULL空值。可是当我们查询时,其结果显示的却是插入记录的当前时间。这是怎么一回事呢?其实这就是在MySQL数据库中执行SQL语句时经常会遇到的一个陷阱:空值不一定为空。在操作时,明明插入的是一个空值的数据,但是最后查询得到的却不是一个空值。
  在MySQL数据库中,NULL对于一些特殊类型的列来说,其代表了一种特殊的含义,而不仅仅是一个空值。对于这些特殊类型的列,各位读者主要是要记住两个。一个就是笔者上面举的TimesTamp数据类型。如果往这个数据类型的列中插入Null值,则其代表的就是系统的当前时间。另外一个是具有auto_increment属性的列。如果往这属性的列中插入Null值的话,则系统会插入一个正整数序列。而如果在其他数据类型中,如字符型数据的列中插入Null的数据,则其插入的就是一个空值。
  陷阱二:空值不一定等于空字符
  在MySQL中,空值(Null)与空字符(’’)相同吗?答案是否定的。
  在同一个数据库表中,同时插入一个Null值的数据和一个’’空字符的数据,然后利用Select语句进行查询。显然其显示的结果是不相同的。从这个结果中就可以看出,空值不等于空字符。这就是在MySQL中执行SQL语句遇到的第二个陷阱。在实际工作中,空值数据与空字符往往表示不同的含义。数据库管理员可以根据实际的需要来进行选择。如对于电话号码等字段,可以默认设置为空值(表示根本不知道对方的电话号码)或者设置为空字符(表示后来取消了这个号码)等等。由于他们在数据库中会有不同的表现形式,所以数据库管理员需要区别对待。笔者更加喜欢使用空值,而不是空字符。这主要是因为针对空值这个数据类型有几个比较特殊的运算字符。如果某个字段是空字符,数据库中是利用字段名称来代替。相反,如果插入的是空值,则直接显示的是NULL。这跟其他数据库的显示方式也是不同的。
  一是IS NULL 和IS NOT NULL关键字。如果要判断某个字段是否含用空值的数据,需要使用特殊的关键字。其中前者表示这个字段为空,后者表示这个字段为非空。在Select语句的查询条件中这两个关键字非常的有用。如需要查询所有电话号码为空的用户(需要他们补充电话号码信息),就可以在查询条件中加入is not null关键字。
  二是Count等统计函数,在空值上也有特殊的应用。如现在需要统计用户信息表中有电话号码的用户数量,此时就可以使用count函数、同时将电话号码作为参数来使用。因为在统计过程中,这个函数会自动忽略空值的数据。此时统计出来的就是有电话号码的用户信息。如果采用的是空字符的数据,则这个函数会将其统计进去。统计刚才建立的两条记录时,系统统计的结果是1,而不是2。可见系统自动将Null值的数据忽略掉了。
判断NULL用is null
或者 is not null。 sql语句里可以用ifnull函数来处理
判断空字符串‘’,要用 =&& 或者 &&&&。sql语句里可以用if(col,col,0)处理,即:当col为true时(非null,及非&&)显示,否则打印0
相关 [笔记 mysql null] 推荐:
- jackyrong
mysql中的null值和空值区别,注意到null值是未知的,占用空间,并且不走索引;下面转载两篇文笔记之:. 相信很多用了mysql很久的人,对这两个字段属性的概念还不是很清楚,一般会有以下疑问:. 1、我字段类型是not null,为什么我可以插入空值. 2、为毛not null的效率比null高.
- 博客园_首页
MySQL 4.x版本及以上版本提供了全文检索支持,但是表的存储引擎类型必须为MyISAM,以下是建表SQL,注意其中显式设置了存储引擎类型.
其中FULLTEXT(title, body) 给title和body这两列建立全文索引,之后检索的时候注意必须同时指定这两列.
说明全文匹配时忽略大小写.
- 阮一峰的网络日志
大多数计算机语言,都有一个表示&无&的值,比如,C语言的NULL,Java语言的null,Python语言的none,Ruby语言的nil. 有点奇怪的是,JavaScript语言居然有
两个表示&无&的值:undefined和null. 在JavaScript中,将一个变量赋值为undefined或null,老实说,几乎没区别.
- IT技术博客大学习
字段尽可能用NOT NULL,而不是NULL,除非特殊情况. 这句话在mysql优化的文章被大量的引用,但却不说明原因,下面就讲述一下相关内容. NULL
为什么多人用. 1、NULL是创建数据表时默认的,初级或不知情的或怕麻烦的程序员不会注意这点. 2、很多人员都以为not null 需要更多空间,其实这不是重点.
- CSDN博客数据库推荐文章
SHOW STATUS LIKE ‘value&; 查询MySQL数据库的性能. Connections:连接MySQL服务器的次数. Uptime:MySQL服务器的上线时间. Slow_queries:慢查询的次数. Com_lelect:查询操作的次数. Com_insert:插入操作的次数.
- ITeye博客
Mysql高性能学习笔记2. 高性能Mysql中的第二章-基准测试和第三章-服务器性能剖析是需要全局考虑的问题,不同的应用场景,基准测试的方式和输入数据是不太一样的. 所以我们后续再讨论这两个问题,先放过去,直接进行优化schema和数据类型的这一话题. 优化数据类型,基本上是用在建表和修改表的场景上,整个优化数据类型这一话题说下来,基本上都是集中于:对于DB数据的高效存储和高效查询.
- Jerome - 我的宝贝孙秀楠 ﹣C++, Lua, 大连,程序员
博客园cnblogs不知为何最近开始渐有C语言开发重启的迹象,不少人开始写一些C语言的教程. 其中看到一段有趣的留言,提到这个写法:if (p == NULL),. 有人说这是不好的~,经典不提倡的~,会写错出问题的~,华为都禁止的~. 首先这种写法是有问题,一般来讲对于空指针可以这样写. 或者反义是这样 if ( !p ).
- CSDN博客推荐文章
Java中有关 null 的9件事. 对于Java程序员来说,null是令人头痛的东西. 时常会受到空指针异常(NPE)的骚扰. 连Java的发明者都承认这是他的一项巨大失误. Java为什么要保留null呢. null出现有一段时间了,并且我认为Java发明者知道null与它解决的问题相比带来了更多的麻烦,但是null仍然陪伴着Java.
- MySQLOPS 数据库与运维自动化技术分享
第一章、mysql体系结构和存储引擎. 1.1、数据库和实例的区别. 数据库:物理操作系统或其他形式文件类型的集合. 在mysql下数据库文件可以是frm,myd,myi,ibd结尾的文件. 数据库实例:由数据库后台进程/线程以及一个共享内存区组成. mysql数据库是但进程多线程的程序. 1.2、mysql的体系结构.
- MySQLOPS 数据库与运维自动化技术分享
4.1、innodb存储引擎表类型. innodb表类似oracle的IOT表(索引聚集表-indexorganized table),在innodb表中每张表都会有一个主键,如果在创建表时没有显示的定义主键则innodb如按照如下方式选择或者创建主键. 首先表中是否有唯一非空索引(unique not null),如果有则该列即为主键.
坚持分享优质有趣的原创文章,并保留作者信息和版权声明,任何问题请联系:@。}

我要回帖

更多关于 mysql null 空字符串 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信