详解MySQL中的NULL值

 更新时间:2015年05月26日 17:53:48   投稿:goldensun  
这篇文章主要介绍了MySQL中的NULL值的相关知识,是MySQL入门学习中的基础知识,需要的朋友可以参考下

我们已经看到使用WHERE子句的SQL SELECT命令来从MySQL表获取数据。但是,当我们试图给的条件比较字段或列的值为NULL,它不能正常工作。

为了处理这种情况,MySQL提供了三大运算符

  1.     IS NULL: 此运算符返回true,当列的值是NULL。
  2.     IS NOT NULL: 运算符返回true,当列的值不是NULL。
  3.     <=> 操作符比较值(不同于=运算符)为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 -p password;
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_tbl;
+-----------------+----------------+
| tutorial_author | tutorial_count |
+-----------------+----------------+
| mahran     |       20 |
| mahnaz     |      NULL |
| Jen       |      NULL |
| Gill      |       20 |
+-----------------+----------------+
4 rows in set (0.00 sec)

mysql>

可以看到=和!=不使用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 |
+-----------------+----------------+
| mahnaz     |      NULL |
| Jen       |      NULL |
+-----------------+----------------+
2 rows in set (0.00 sec)
mysql> SELECT * from tcount_tbl 
  -> WHERE tutorial_count IS NOT NULL;
+-----------------+----------------+
| tutorial_author | tutorial_count |
+-----------------+----------------+
| mahran     |       20 |
| Gill      |       20 |
+-----------------+----------------+
2 rows in set (0.00 sec)

PHP脚本处理NULL值:

可以使用IF ... ELSE条件准备的基础上操作NULL值的查询。
例子:

下面的示例tutorial_count从外部,然后它与可在表中的值进行比较。

<?php
$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';
}
else
{
  $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);
?>


相关文章

  • MySQL开发规范与使用技巧总结

    MySQL开发规范与使用技巧总结

    今天小编就为大家分享一篇关于MySQL开发规范与使用技巧总结,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2019-03-03
  • mysql查询每小时数据和上小时数据的差值实现思路详解

    mysql查询每小时数据和上小时数据的差值实现思路详解

    这篇文章主要介绍了mysql查询每小时数据和上小时数据的差值,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-04-04
  • CentOS 7.2 Yum编译安装MySQL 5.6

    CentOS 7.2 Yum编译安装MySQL 5.6

    这篇文章主要为大家介绍了CentOS 7.2 Yum编译安装MySQL 5.6详细代码,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2016-11-11
  • Window环境下MySQL UDF提权

    Window环境下MySQL UDF提权

    本文章仅记录某次内网渗透过程中遇到的MySQL 采用UDF提权等方式进行获取权限,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧<BR>
    2023-03-03
  • MySQL运维实战使用RPM进行安装部署

    MySQL运维实战使用RPM进行安装部署

    这篇文章主要为大家介绍了MySQL运维实战使用RPM进行安装部署实现示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-12-12
  • Mysql 5.7 服务下载安装图文教程(经典版)

    Mysql 5.7 服务下载安装图文教程(经典版)

    MySQL 5.7在诸多方面都进行了大幅的改进,主要在于安全性、灵活性、易用性、可用性和性能等几个方面。这篇文章主要介绍了Mysql5.7服务下载安装图文教程(经典版),需要的朋友可以参考下
    2016-09-09
  • 使用SQLyog的sql条件查询方式

    使用SQLyog的sql条件查询方式

    这篇文章主要介绍了使用SQLyog的sql条件查询方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-05-05
  • Mysql中in和exists的区别 & not in、not exists、left join的相互转换问题

    Mysql中in和exists的区别 & not in、not exists、left join的相互转换问题

    这篇文章主要介绍了Mysql中in和exists的区别 & not in、not exists、left join的相互转换,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-09-09
  • MySQL 连接查询的原理和应用

    MySQL 连接查询的原理和应用

    这篇文章主要介绍了MySQL 连接查询的原理和应用,帮助大家更好的理解和学习MySQL数据库,感兴趣的朋友可以了解下
    2020-11-11
  • MySQL使用B+Tree当索引的优势有哪些

    MySQL使用B+Tree当索引的优势有哪些

    这篇文章主要介绍了MySQL使用B+Tree当索引有哪些优势,帮助大家更好的理解和学习使用MySQL,感兴趣的朋友可以了解下
    2021-03-03

最新评论