详解MySQL中的NULL值
程序员文章站
2024-02-29 13:45:10
我们已经看到使用where子句的sql select命令来从mysql表获取数据。但是,当我们试图给的条件比较字段或列的值为null,它不能正常工作。
为了处理这种情况,...
我们已经看到使用where子句的sql select命令来从mysql表获取数据。但是,当我们试图给的条件比较字段或列的值为null,它不能正常工作。
为了处理这种情况,mysql提供了三大运算符
- is null: 此运算符返回true,当列的值是null。
- is not null: 运算符返回true,当列的值不是null。
- <=> 操作符比较值(不同于=运算符)为ture,即使两个null值
涉及null条件是特殊的。不能使用 =null 或 !=null 寻找null值的列。这种比较总是告诉他们是否是真正的失败,因为这是不可能的。即使是null=null失败。
如果要查找是或不是null的列,请使用is null或is not null。
在命令提示符下使用null值:
假设一个表tcount_tbl,它包含了两个的列stutorial_author和tutorial_count,其中一个tutorial_count为null 表示的值是未知的
例子:
试试下面的例子:
root@host# mysql -u root -p password; enter password:******* mysql> use tutorials; database changed mysql> 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>
可以看到=和!=不使用null值,如下所示:
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)
要找到,其中tutorial_count列是或不是null的记录,查询应该这样写:
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脚本处理null值:
可以使用if ... else条件准备的基础上操作null值的查询。
例子:
下面的示例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); ?>
上一篇: J2EE项目代码编写规范分享
下一篇: MySQL 修改数据库名称的一个新奇方法