MySQL系列關(guān)于NUll值的經(jīng)驗總結(jié)分析教程
1.測試數(shù)據(jù)
create table test_null (
id int,
name varchar(20),
chinese int,
math int,
english int
) charset=utf8;
insert into test_null
values
(1,null,80,70,68),
(2,'張三',60,null,null),
(3,'李四',null,90,80),
(4,'王五',90,60,75),
(5,null,null,50,95);
結(jié)果如下:

2.null值帶給我們的不便影響
1)過濾有所不同,只能使用is null或者is not null;
# null值不能使用 == 或 != 來比較 # 下面兩種用法都是錯誤的 select * from test_null where name == null; select * from test_null where name != null; # null值一般使用 is null 或 is not null 來比較 # 下面兩種用法才是正確的 select * from test_null where name is null; select * from test_null where name is not null;
2)出現(xiàn)null值,會導(dǎo)致+ - * /運算失效;
select *,(chinese+math+english) as 總分 from test_null;
結(jié)果如下:

3)null值對聚合函數(shù)無影響,聚合函數(shù)會直接忽略null值;
select
sum(chinese) 語文總分,
sum(math) 數(shù)學(xué)總分,
sum(english) 外語總分
from test_null
結(jié)果如下:

3.空格、空值和null,我們應(yīng)該怎么判斷呢?
1)空格、空值和null的區(qū)別
用一個形象的比喻來說明這三者的區(qū)別。首先空格很好理解,一個空字符串嗎,占據(jù)一定的空間大小。不好理解的其實是空值和null,空值相當(dāng)于一個杯子是真空狀態(tài)的,什么也沒有,null表示的杯子中有空氣。
MySQL中,null是未知的,且占用空間的。null使得索引、索引統(tǒng)計和值都更加復(fù)雜,并且影響優(yōu)化器的判斷。空值('')是不占用空間的,注意空值的''之間是沒有空格的。在進行count()統(tǒng)計某一列記錄數(shù)的時候,如果存在null值,會被系統(tǒng)自動忽略掉,但是空值會被統(tǒng)計到其中。判斷null使用的是is null和 is not null,但判斷空字符使用的是= ,!=, <>來進行處理。對于timestamp數(shù)據(jù)類型,如果插入null值,則出現(xiàn)的值是當(dāng)前系統(tǒng)時間。插入空值,則會出現(xiàn)0000-00-00 00:00:00。對于已經(jīng)創(chuàng)建好的表,普通的列將null修改為not null帶來的性能提升較小,所以調(diào)優(yōu)時候沒有比要注意。
2)出現(xiàn)了null值,我應(yīng)該怎么辦?
通過上面的分析我們已經(jīng)知道了,當(dāng)表中存在null值,會導(dǎo)致加、減、乘、除運算失效。那么我們怎么處理這些null值比較好呢?
第一種方式:直接使用is not null將這些null值過濾掉,但是這樣會將其它非缺失值的字段過濾掉,造成數(shù)據(jù)的浪費。
第二種方式:也是我們推薦的方式,我們使用函數(shù)進行缺失值的填充。
ifnull()和coalesce()函數(shù)的使用:
select
id,
coalesce(name,'無名氏') name,
coalesce(chinese,0) chinese,
ifnull(math,0) math,
ifnull(english,0) english
from test_null;
結(jié)果如下:

以上就是MySQL系列關(guān)于NUll值的經(jīng)驗總結(jié)分析的詳細內(nèi)容,更多關(guān)于MySQL中的NUll值的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
Mysql?InnoDB引擎中的數(shù)據(jù)頁結(jié)構(gòu)詳解
這篇文章主要為大家介紹了Mysql?InnoDB引擎中的數(shù)據(jù)頁結(jié)構(gòu)詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2022-05-05
教你使用MySQL Shell連接數(shù)據(jù)庫的方法
MySQL中導(dǎo)出用戶權(quán)限設(shè)置的腳本分享

