Mysql 教程
1. MySQL 教程 2. MySQL 安装 3. MySQL 管理 4. MySQL PHP 语法 5. MySQL 连接 6. MySQL 创建数据库 7. MySQL 删除数据库 8. MySQL 选择数据库 9. MySQL 数据类型 10. MySQL 创建数据表 11. MySQL 删除数据表 12. MySQL 插入数据 13. MySQL 查询数据 14. MySQL WHERE 子句 15. MySQL UPDATE 更新 16. MySQL DELETE 语句 17. MySQL LIKE 子句 18. MySQL 排序 19. MySQL 连接的使用 20. MySQL NULL 值处理 21. MySQL 正则表达式 22. MySQL 事务 23. MySQL ALTER命令 24. MySQL 索引 25. MySQL 临时表 26. MySQL 复制表 27. MySQL 元数据 28. MySQL 序列使用 29. MySQL 处理重复数据 30. MySQL 及 SQL 注入 31. MySQL 导出数据 32. MySQL 导入数据 33. MySQL 函数 34. MySQL 运算符

MySQL NULL 值处理

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 运算符。

注意:

select * , columnName1+ifnull(columnName2,0) from tableName;

columnName1,columnName2 为 int 型,当 columnName2 中,有值为 null 时,columnName1+columnName2=null, ifnull(columnName2,0) 把 columnName2 中 null 值转为 0。


在命令提示符中使用 NULL 值

以下实例中假设数据库 中的表 _test_tbl 含有两列 _author 和 _count, _count 中设置插入NULL值。

实例

尝试以下实例:

创建数据表 _test_tbl

root@host# mysql -u root -p password; Enter password:******* mysql> use ; Database changed mysql> create table _test_tbl -> ( -> _author varchar(40) NOT NULL, -> _count INT -> ); Query OK, 0 rows affected (0.05 sec) mysql> INSERT INTO _test_tbl (_author, _count) values ('', 20); mysql> INSERT INTO _test_tbl (_author, _count) values ('', NULL); mysql> INSERT INTO _test_tbl (_author, _count) values ('Google', NULL); mysql> INSERT INTO _test_tbl (_author, _count) values ('FK', 20); mysql> SELECT * from _test_tbl; +---------------+--------------+ | _author | _count | +---------------+--------------+ | | 20 | | | NULL | | Google | NULL | | FK | 20 | +---------------+--------------+ 4 rows in set (0.01 sec)

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

mysql> SELECT * FROM _test_tbl WHERE _count = NULL; Empty set (0.00 sec) mysql> SELECT * FROM _test_tbl WHERE _count != NULL; Empty set (0.01 sec)

查找数据表中 _test_tbl 列是否为 NULL,必须使用 IS NULLIS NOT NULL,如下实例:

mysql> SELECT * FROM _test_tbl WHERE _count IS NULL; +---------------+--------------+ | _author | _count | +---------------+--------------+ | | NULL | | Google | NULL | +---------------+--------------+ 2 rows in set (0.01 sec) mysql> SELECT * from _test_tbl WHERE _count IS NOT NULL; +---------------+--------------+ | _author | _count | +---------------+--------------+ | | 20 | | FK | 20 | +---------------+--------------+ 2 rows in set (0.01 sec)

使用 PHP 脚本处理 NULL 值

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

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

MySQL ORDER BY 测试:

<?php $dbhost = 'localhost'; // mysql服务器主机地址 $dbuser = 'root'; // mysql用户名 $dbpass = '123456'; // mysql用户名密码 $conn = mysqli_connect($dbhost, $dbuser, $dbpass); if(! $conn ) { die('连接失败: ' . mysqli_error($conn)); } // 设置编码,防止中文乱码 mysqli_query($conn , "set names utf8"); if( isset($_count )) { $sql = "SELECT _author, _count FROM _test_tbl WHERE _count = $_count"; } else { $sql = "SELECT _author, _count FROM _test_tbl WHERE _count IS NULL"; } mysqli_select_db( $conn, '' ); $retval = mysqli_query( $conn, $sql ); if(! $retval ) { die('无法读取数据: ' . mysqli_error($conn)); } echo '<h2> IS NULL 测试<h2>'; echo '<table border="1"><tr><td>作者</td><td>登陆次数</td></tr>'; while($row = mysqli_fetch_array($retval, MYSQL_ASSOC)) { echo "<tr>". "<td>{$row['_author']} </td> ". "<td>{$row['_count']} </td> ". "</tr>"; } echo '</table>'; mysqli_close($conn); ?>

输出结果如下图所示: