MySQL NULL
简介:在本教程中,您将学习如何使用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。