MySQL NULL

时间:2019-11-20 08:52:31  来源:igfitidea点击:

简介:在本教程中,您将学习如何使用MySQL NULL值。
此外,您还将学到一些有用的函数来有效地处理NULL值。

MySQL NULL值简介

在MySQL中,NULL值表示未知。
NULL值不同于零(0)或空字符串''。

NULL值不等于任何值,甚至不等于任何值。
如果将NULL值与另一个NULL值或任何其他值进行比较,则结果为NULL,因为每个NULL值的值都是未知的。

通常,您使用NULL值表示数据丢失,未知或不适用。
例如,潜在客户的电话号码可能为NULL,以后可以添加。

创建表时,可以通过使用NOT NULL约束指定列是否接受NULL值。

例如,以下语句创建Leads表:

DROP TABLE IF EXISTS leads;

CREATE TABLE leads (
    id INT AUTO_INCREMENT PRIMARY KEY,
    first_name VARCHAR(50) NOT NULL,
    last_name VARCHAR(50) NOT NULL,
    source VARCHAR(255) NOT NULL,
    email VARCHAR(100),
    phone VARCHAR(25)
);

在此销售线索表中,列ID是主键列,因此,它不接受任何NULL值。

first_name,last_name和source列使用NOT NULL约束,因此,您不能在这些列中插入任何NULL值,而email和phone列则接受NULL值。

您可以在INSERT语句中使用NULL值来指定数据丢失。
例如,以下语句在Leads表中插入一行。
由于电话号码丢失,因此使用NULL值。

INSERT INTO leads(first_name,last_name,source,email,phone)
VALUE('John','Doe','Web Search','[email protected]',NULL);

因为email列的默认值为NULL,所以您可以在INSERT语句中省略电子邮件,如下所示:

INSERT INTO leads(first_name,last_name,source,phone)
VALUES
    ('Lily','Bush','Cold Calling','(408)-555-1234'),
    ('David','William','Web Search','(408)-888-6789');

UPDATE语句中的MySQL SET NULL

要将列的值设置为NULL,请使用赋值运算符(=)。
例如,要将David William的电话更新为NULL,请使用以下UPDATE语句:

UPDATE leads 
SET 
    phone = NULL
WHERE
    id = 3;

MySQL ORDER BY为NULL

如果使用ORDER BY子句对结果集进行升序排序,则MySQL会认为NULL值低于其他值,因此,它将首先显示NULL值。

以下语句按电话号码升序对销售线索进行排序。

SELECT 
    *
FROM
    leads
ORDER BY phone;

如果使用ORDER BY DESC,则NULL值将出现在结果集的最后。
请参见以下示例:

SELECT 
    *
FROM
    leads
ORDER BY phone DESC;

要在查询中测试NULL,请在WHERE子句中使用IS NULL或IS NOT NULL运算符。

例如,要获取尚未提供电话号码的潜在客户,请使用IS NULL运算符,如下所示:

SELECT 
    *
FROM
    leads
WHERE
    phone IS NULL;

您可以使用IS NOT运算符来获取所有提供电子邮件地址的销售线索。

SELECT 
    *
FROM
    leads
WHERE
    email IS NOT NULL;

即使NULL不等于NULL,在GROUP BY子句中两个NULL值也相等。

SELECT 
    id, first_name, last_name, email, phone
FROM
    leads
GROUP BY email;

该查询仅返回两行,因为电子邮件列为NULL的行被分组为一个。

MySQL NULL和UNIQUE索引

在列上使用UNIQUE约束或UNIQUE索引时,可以在该列中插入多个NULL值。
很好,因为在这种情况下,MySQL认为NULL值是不同的。

让我们通过为"电话"列创建一个唯一索引来验证这一点。

CREATE UNIQUE INDEX idx_phone ON leads(phone);

注意,如果您使用BDB存储引擎,MySQL会认为NULL值相等,因此您不能将多个NULL值插入具有唯一约束的列中。

MySQL NULL函数

MySQL提供了一些有用的函数来有效地处理NULL:IFNULL,COALESCE和NULLIF。

IFNULL函数接受两个参数。
IFNULL函数如果不为NULL,则返回第一个参数,否则,返回第二个参数。

例如,以下语句如果不为NULL则返回电话号码,否则返回N / A而不是NULL。

SELECT 
    id, 
    first_name, 
    last_name, 
    IFNULL(phone, 'N/A') phone
FROM
    leads;

COALESCE函数接受参数列表并返回第一个非NULL参数。
例如,您可以使用COALESCE功能根据信息的优先级按以下顺序显示潜在客户的联系信息:电话,电子邮件和N / A。

SELECT 
    id,
    first_name,
    last_name,
    COALESCE(phone, email, 'N/A') contact
FROM
    leads;

NULLIF函数接受两个参数。
如果两个参数相等,则NULLIF函数将返回NULL。
否则,它返回第一个参数。

当您在列中同时具有NULL和空字符串值时,NULLIF函数将非常有用。
例如,错误地将以下行插入Leads表中:

INSERT INTO leads(first_name,last_name,source,email,phone)
VALUE('Thierry','Henry','Web Search','[email protected]','');

电话是空字符串,而不是NULL。

如果要获取销售线索的联系信息,您将得到一个空电话而不是电子邮件,如下查询:

SELECT 
    id,
    first_name,
    last_name,
    COALESCE(phone, email, 'N/A') contact
FROM
    leads;

要解决此问题,请使用NULLIF函数将电话与空字符串进行比较,如果它们相等,则返回NULL,否则返回电话号码。

SELECT 
    id,
    first_name,
    last_name,
    COALESCE(NULLIF(phone, ''), email, 'N/A') contact
FROM
    leads;

在本教程中,您学习了如何使用MySQL NULL以及如何使用一些方便的函数来处理查询中的NULL。