MySQL NULL 值

  • NULL值

    我们已经看到了SQL SELECT命令和WHERE子句,以便从MySQL表中获取数据,但是当我们尝试给出一个条件,该条件将字段或列的值与NULL进行比较时,它不能正常工作。为了处理这种情况,MySQL提供了三个运算符
    • IS NULL- 如果列值为NULL,则此运算符返回true。
    • IS NOT NULL -如果列值不为NULL,则此运算符返回true。
    • <=> - 此运算符比较值(与=运算符不同),即使对于两个NULL值也是如此。
    涉及NULL的条件是特殊的。您不能使用 = NULL或 != NULL在列中查找 NULL 值。这样的比较总是会失败,因为无法判断它们是否正确。有时,即使 NULL = NULL也会失败。要查找是否为NULL的列,请使用IS NULLIS NOT NULL
  • 在命令提示符处使用NULL值

    假设mydb数据库中存在一个名为tcount_tbl的表,并且该表包含两列,即tutorial_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或不为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 = 'mysql';
    $dbuser = 'test';
    $dbpass = '123456';
    $conn = mysqli_connect($dbhost, $dbuser, $dbpass);
    
    if(! $conn ) {
        die('Could not connect: ' . mysqli_error($conn));
    }
    
    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 NULL";
    } 
    mysqli_select_db($conn,'mydb');
    $retval = mysqli_query( $conn, $sql );
    
    if(! $retval ) {
        die('Could not get data: ' . mysqli_error($conn));
    }
    
    while($row = mysqli_fetch_array($retval, MYSQLI_ASSOC)) {
        echo "Author:{$row['tutorial_author']}  <br> ".
            "Count: {$row['tutorial_count']} <br> ".
            "--------------------------------<br>";
    }
    echo "Fetched data successfully\n";
    mysqli_close($conn);
    ?>
    
    尝试一下