详解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);
?>