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)永远返回false,即 NULL = NULL 返回false 。

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

在命令提示符中使用 NULL 值

以下实例中假设数据库 TUTORIALS 中的表 tcount_tbl 含有两列 tutorial_author 和 tutorial_count, tutorial_count 中设置插入NULL值。

实例

尝试以下实例:

root@host# mysql -u root -p password;Enter password:*******mysql> use TUTORIALS;Database changedmysql> 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>
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)
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脚本中你可以在 if...else 语句来处理变量是否为空,并生成相应的条件语句。

以下实例中PHP设置了$tutorial_count变量,然后使用该变量与数据表中的 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);?>

更多相关文章

  1. MySQL系列多表连接查询92及99语法示例详解教程
  2. 《Android和PHP最佳实践》官方站
  3. android用户界面之按钮(Button)教程实例汇
  4. Android(安卓)- Manifest 文件 详解
  5. TabHost与RadioGroup结合完成的菜单【带效果图】5个Activity
  6. Android的Handler机制详解3_Looper.looper()不会卡死主线程
  7. Android(安卓)UI开发第十七篇——Android(安卓)Fragment实例(Lis
  8. Android——Activity四种启动模式
  9. Selector、shape详解(一)

随机推荐

  1. Linux内核中的container_of函数简要介绍
  2. linux环境安装node.js环境和pm2
  3. Linux网络编程-客户端与服务器端通信(Ech
  4. 守护进程的单实例实现
  5. 【Linux_Shell 脚本编程学习笔记五、Orac
  6. Linux 操作系统挂起、休眠、关机相关命令
  7. 如何用vmware虚拟机增加一块硬盘
  8. 远程连接腾讯云MySQL数据库
  9. linux安装postgresql简洁版
  10. C语言文件I/O 读取一个文件并输出出来 和