mysql資料庫其中一列為null,他會有什麼坑

my38778570發表於2022-12-14

1. count 資料丟失

當某列存在 NULL 值時,再使用 count 查詢該列,就會出現資料“丟失”問題,如下 SQL 所示:

select count(*),count(name) from person;

查詢執行結果如下:

減少HTTP請求

從上述結果可以看出,當使用的是 count(name) 查詢時,就丟失了兩條值為 NULL 的資料丟失

解決方案

如果某列存在 NULL 值時,就是用 count(*)或者 count(id) 進行資料統計。

2.distinct 資料丟失

當使用 count(distinct co11,co2) 查詢時,如果其中一列為 NULL,那麼即使另一列有不同的值,那麼查詢的結果也會將資料丟失,如下 SQL 所示:

select count(distinct name ,mobile) from person;

查詢執行結果如下:

減少HTTP請求

3.select 資料丟失

如果某列存在 ULL 值時,如果執行非等於查詢 (<>/!=)會導致為 NULL 值的結果丟失

select * from person where name<>'php' order by id;
--或
select * from person where name!='php' order by id;

4.導致空指標異常

如果某列存在 NULL 值時,可能會導致 sum(column)的返回結果為 NULL 而非0,如果 sum 查詢的結果為NULL 就可以能會導致程式執行時空指標異常

接下來我們使用 sum 查詢,執行以下SQL

select sum(num) from goods where id>4;

解決空指標異常

可以使用以下方式來避免空指標異常

select ifnull(sum(num),0) from goods where id>4;

5. 增加了查詢難度

當某列值中有 NULL 值時,在進 NULL 值或者非 NULL 值的查詢難度就增加了
所謂的查詢難度增加指的是當進行 ULL 值查詢時,必須使用 NULL 值匹配的查詢方法,比如 S NULL 或者SNOT NULL 又或者是 IFNULL(cloumn) 這樣的表示式進行查詢,而傳統的 =、!=<>..等這些表示式就不能使用了,這就增加了查詢的難度,尤其是對小白程式設計師來說

錯誤用法 1:

select * from person where name<>null;

錯誤用法 2:

select * from person where name!=null;

正確用法 1:

select * from person where name is not null;

正確用法2:

select * from person where !isnull(name);

推薦用法

阿里巴巴《Java開發手冊》推薦我們使用 ISNULL(cloumn)來判斷 NULL 值,原因是在 SOL 語句中,如果在null 前換行,影響可讀性;而 ISNULL(column)是一個整體,簡潔易懂。從效能資料上分析 ISNULL(column)執行效率也更快一些。

擴充套件知識: NULL不會影響索引

本作品採用《CC 協議》,轉載必須註明作者和本文連結

相關文章