教程 > MySQL 教程 > MySQL 教程 阅读:26

MySQL NULL 值

我们已经知道 MySQL 使用 SQL SELECT 命令及 WHERE 子句来读取数据表中的数据,但是当提供的查询条件字段为 NULL 时,该命令可能就无法正常工作。

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

  • IS NULL: 当列的值是 NULL,此运算符返回 true。
  • IS NOT NULL: 当列的值不为 NULL, 运算符返回 true。
  • <=>: 比较操作符(不同于 = 运算符),当比较的的两个值相等或者都为 NULL 时返回 true。

关于 NULL 的条件比较运算是比较特殊的。你不能使用 = NULL 或 != NULL 在列中查找 NULL 值 。

在 MySQL 中,NULL 值与任何其它值的比较(即使是 NULL)永远返回 NULL,即 NULL = NULL 返回 NULL 。

MySQL 中处理 NULL 使用 IS NULL 和 IS NOT NULL 运算符。


在命令提示符中使用 NULL 值

以下示例中使用在前面章节中在数据库 JIYIK 中的表 tcount_tbl ,该表含有两列 jiyik_author 和 jiyik_count, jiyik_count 中设置插入NULL值。

mysql> INSERT INTO tcount_tbl (jiyik_author, jiyik_count) values ('onmpw', NULL);
Query OK, 1 row affected (0.00 sec)

mysql> INSERT INTO tcount_tbl (jiyik_author, jiyik_count) values ('jiyik', NULL);
Query OK, 1 row affected (0.00 sec)

mysql> SELECT * FROM tcount_tbl;
+--------------+-------------+
| jiyik_author | jiyik_count |
+--------------+-------------+
| 迹忆客       |          10 |
| jiyik.com    |          20 |
| Google       |          22 |
| onmpw        |        NULL |
| jiyik        |        NULL |
+--------------+-------------+
5 rows in set (0.00 sec)

以下示例中你可以看到 = 和 != 运算符是不起作用的:

mysql> SELECT * FROM tcount_tbl WHERE jiyik_count = NULL;
Empty set (0.00 sec)

mysql> SELECT * FROM tcount_tbl WHERE jiyik_count != NULL;
Empty set (0.01 sec)

查找数据表中 tcount_tbl 列是否为 NULL,必须使用 IS NULL 和 IS NOT NULL,如下所示:

mysql> SELECT * FROM tcount_tbl WHERE jiyik_count IS NULL;
+--------------+-------------+
| jiyik_author | jiyik_count |
+--------------+-------------+
| onmpw        |        NULL |
| jiyik        |        NULL |
+--------------+-------------+
2 rows in set (0.01 sec)

mysql> SELECT * FROM tcount_tbl WHERE jiyik_count IS NOT NULL;
+--------------+-------------+
| jiyik_author | jiyik_count |
+--------------+-------------+
| 迹忆客       |          10 |
| jiyik.com    |          20 |
| Google       |          22 |
+--------------+-------------+
3 rows in set (0.00 sec)

使用 PHP 脚本处理 NULL 值

PHP 脚本中你可以在 if...else 语句来处理变量是否为空,并生成相应的条件语句。

以下实例中 PHP 设置了 $jiyik_count 变量,然后使用该变量与数据表中的 jiyik_count 字段进行比较:

<?php
$dbhost = 'localhost';
$dbuser = 'root';
$dbpass = '123456';
$dbname = 'JIYIK';
$mysqli = new mysqli($dbhost, $dbuser, $dbpass, $dbname);
$jiyik_count = null;
if($mysqli->connect_errno ) {
    printf("Connect failed: %s\n", $mysqli->connect_error);
    exit();
}
printf("Connected successfully.\n");

if(isset($jiyik_count )) {
    $sql = "SELECT jiyik_author, jiyik_count FROM  tcount_tbl WHERE jiyik_count = {$jiyik_count}";
} else {
    $sql = 'SELECT jiyik_author, jiyik_count FROM  tcount_tbl WHERE jiyik_count IS NULL';
}
$result = $mysqli->query($sql);
if ($result->num_rows > 0) {
    while($row = $result->fetch_assoc()) {
        printf("Author: %s, Count: %d \n",
            $row["jiyik_author"],
            $row["jiyik_count"]);
    }
} else {
    printf("No record found.\n");
}
$mysqli->close();
?>

结果如下:

Connected successfully.
Author: onmpw, Count: 0 
Author: jiyik, Count: 0

查看笔记

扫码一下
查看教程更方便