详解MySQL中的NULL值
我们已经看到使用WHERE子句的SQLSELECT命令来从MySQL表获取数据。但是,当我们试图给的条件比较字段或列的值为NULL,它不能正常工作。
为了处理这种情况,MySQL提供了三大运算符
- ISNULL:此运算符返回true,当列的值是NULL。
- ISNOTNULL:运算符返回true,当列的值不是NULL。
- <=>操作符比较值(不同于=运算符)为ture,即使两个NULL值
涉及NULL条件是特殊的。不能使用=NULL或!=NULL寻找NULL值的列。这种比较总是告诉他们是否是真正的失败,因为这是不可能的。即使是NULL=NULL失败。
如果要查找是或不是NULL的列,请使用ISNULL或ISNOTNULL。
在命令提示符下使用NULL值:
假设一个表tcount_tbl,它包含了两个的列stutorial_author和tutorial_count,其中一个tutorial_count为NULL表示的值是未知的
例子:
试试下面的例子:
root@host#mysql-uroot-ppassword; Enterpassword:******* mysql>useTUTORIALS; Databasechanged mysql>createtabletcount_tbl ->( ->tutorial_authorvarchar(40)NOTNULL, ->tutorial_countINT ->); QueryOK,0rowsaffected(0.05sec) mysql>INSERTINTOtcount_tbl ->(tutorial_author,tutorial_count)values('mahran',20); mysql>INSERTINTOtcount_tbl ->(tutorial_author,tutorial_count)values('mahnaz',NULL); mysql>INSERTINTOtcount_tbl ->(tutorial_author,tutorial_count)values('Jen',NULL); mysql>INSERTINTOtcount_tbl ->(tutorial_author,tutorial_count)values('Gill',20); mysql>SELECT*fromtcount_tbl; +-----------------+----------------+ |tutorial_author|tutorial_count| +-----------------+----------------+ |mahran|20| |mahnaz|NULL| |Jen|NULL| |Gill|20| +-----------------+----------------+ 4rowsinset(0.00sec) mysql>
可以看到=和!=不使用NULL值,如下所示:
mysql>SELECT*FROMtcount_tblWHEREtutorial_count=NULL; Emptyset(0.00sec) mysql>SELECT*FROMtcount_tblWHEREtutorial_count!=NULL; Emptyset(0.01sec)
要找到,其中tutorial_count列是或不是NULL的记录,查询应该这样写:
mysql>SELECT*FROMtcount_tbl ->WHEREtutorial_countISNULL; +-----------------+----------------+ |tutorial_author|tutorial_count| +-----------------+----------------+ |mahnaz|NULL| |Jen|NULL| +-----------------+----------------+ 2rowsinset(0.00sec) mysql>SELECT*fromtcount_tbl ->WHEREtutorial_countISNOTNULL; +-----------------+----------------+ |tutorial_author|tutorial_count| +-----------------+----------------+ |mahran|20| |Gill|20| +-----------------+----------------+ 2rowsinset(0.00sec)
PHP脚本处理NULL值:
可以使用IF...ELSE条件准备的基础上操作NULL值的查询。
例子:
下面的示例tutorial_count从外部,然后它与可在表中的值进行比较。
<?php $dbhost='localhost:3036'; $dbuser='root'; $dbpass='rootpassword'; $conn=mysql_connect($dbhost,$dbuser,$dbpass); if(!$conn) { die('Couldnotconnect:'.mysql_error()); } if(isset($tutorial_count)) { $sql='SELECTtutorial_author,tutorial_count FROMtcount_tbl WHEREtutorial_count=$tutorial_count'; } else { $sql='SELECTtutorial_author,tutorial_count FROMtcount_tbl WHEREtutorial_countIS$tutorial_count'; } mysql_select_db('TUTORIALS'); $retval=mysql_query($sql,$conn); if(!$retval) { die('Couldnotgetdata:'.mysql_error()); } while($row=mysql_fetch_array($retval,MYSQL_ASSOC)) { echo"Author:{$row['tutorial_author']}<br>". "Count:{$row['tutorial_count']}<br>". "--------------------------------<br>"; } echo"Fetcheddatasuccessfully\n"; mysql_close($conn); ?>