欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

详解MySQL中的NULL值

程序员文章站 2024-02-29 13:45:10
我们已经看到使用where子句的sql select命令来从mysql表获取数据。但是,当我们试图给的条件比较字段或列的值为null,它不能正常工作。 为了处理这种情况,...

我们已经看到使用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);
?>