空值,即NULL,在数据库中通过is null 和is not null来查询
陷阱一:空值不一定为空
  空值是一个比较特殊的字段。在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函数来处理,IFNULL(expression, alt_value),判断第一个表达式是否为 NULL,如果为 NULL 则返回第二个参数的值,如果不为 NULL 则返回第一个参数的值
判断空字符串'' 要用 ='' 或者 <>''。sql语句里可以用IF(expr1,expr2,expr3),如果expr1的值为true (非null,及非''),则返回expr2的值,如果expr1的值为false,则返回expr3的值。

最新文章

  1. sqlserver性能调优第一步
  2. .net 时间戳和日期互转
  3. linux下tftp使用(转一些命令)
  4. ArcGIS Viewer for Flex中引入google map作底图
  5. c#字符串转换为日期,支持任意字符串
  6. AngularJS开发指南5:AngularJS表达式详解
  7. COJ978 WZJ的数据结构(负二十二)
  8. 快笑死,侯捷研究MFC的原因
  9. TCP服务端和客户端的框架
  10. C/C++默认浮点型
  11. fdm_search_info_w_book_chain
  12. Oracle监控指标
  13. Js中的多条件排序,多列排序
  14. 第三题 有如下Student&#160;对象, &#160;private&#160;String&#160;name;&#160;&#160; &#160;&#160;&#160;&#160;private&#160;int&#160;age;&#160;&#160; &#160;&#160;&#160;&#160;private&#160;int&#160;score;&#160;&#160; private&#160;String&#160;classNum;&#160; 其中,classNum&
  15. 都是Javascript的作用域惹得祸
  16. 怎样使用Android Studio开发Gradle插件
  17. 第一天 Java语言概述
  18. C#调用WebService的简单方式
  19. 06 面向对象:多态&amp;抽象类&amp;接口&amp;权限修饰符&amp;内部类
  20. ArcGIS案例学习笔记-点集中最近点对和最远点对

热门文章

  1. 在浏览器上运行 VS Code——GitHub 热点速览 v.21.22
  2. Sparse R-CNN: End-to-End Object Detection with Learnable Proposals 论文解读
  3. python发送丁丁消息
  4. Lua时间互转
  5. Resnet-50网络结构详解
  6. PyTorch 进行 Neural-Transfer
  7. MinkowskiPooling池化(上)
  8. 现代传感器的接口:中断驱动的ADC驱动程序
  9. 编译原理-非确定有穷自动机(nondeterministic finite automata,NFA)
  10. mybatis之Param注解