MySQL NULL 使用帶來的坑

2021-10-02 17:24:32 字數 1632 閱讀 8198

mysql 基礎篇

三正規化mysql 軍規

mysql 配置

mysql 使用者管理和許可權設定

mysql 常用函式介紹

mysql 字段型別介紹

mysql 多列排序

mysql 行轉列 列轉行

mysql null 使用帶來的坑

mysql and 和 or 聯合使用帶來的坑

mysql 觸發器的使用

null 無值(no value),它與字段包含 0 、空字串或僅僅包含空格不同。

資料庫字段允許空值,會遇到一些問題,這裡整理一些 mysql 設定列允許為 null 帶來的坑。

資料準備:

create

table

`teacher` (

`id`

int(11) not

null

auto_increment,

`name`

varchar(32) default

null

, `age`

int(11) default

null,

primary

key(`id`)

) engine

=innodb auto_increment=

4default charset=

utf8mb4;

insert

into `teacher` (`id`, `name`, `age`) values('

1','

seven

','18');

insert

into `teacher` (`id`, `name`, `age`) values('

2', null,'20'

);insert

into `teacher` (`id`, `name`, `age`) values('

3','

zhangsan

', null);

問題一:負向查詢,不能獲取 null 值的行

比如查詢 age!=18 的資料,id=3 的資料獲取不到。

select

*from teacher where age!=

18;

null 與不匹配在通過過濾選擇出不具有特定值的行時,你可能希望返回具有 null 值的行。但是,不行。因為未知具有特殊的含義,資料庫不知道它們是否匹配,所以在匹配過濾或不匹配過濾時不返回它們。

問題二:萬用字元不能匹配到列為 null 的資料

比如我們執行如下語句:

select

*from teacher where name like'%

';

注意 null 雖然似乎 % 萬用字元可以匹配任何東西,但有乙個例外,即 null。即使是 where name like '%' 也不能匹配用值 null 作為姓名的行。

問題三:分組時,null 將作為單獨乙個分組返回

如果分組列中具有 null 值,則 null 將作為乙個分組返回。如果列中有多行 null 值,它們將分為一組。

問題四:聚集函式會忽略列值為 null 的行

比如我們執行如下語句:

Hive 記null帶來的坑

在hive或者impala中,null值表示這個字段值為空值 沒有值 一般情況下我們把資料從原始系統抽取到數倉ods層的時候,都要做空值處理,比方說用nvl 函式把空值置為0或者空字串等等,如果不處理,後續可能給開發帶來坑。下面以乙個具體的例子說明筆者在開發的時候,由於疏忽大意,沒對空值進行處理,導...

mysql null和 的區別

平時我們在使用mysql的時候,對於mysql中的null值和空值區別不能很好的理解。注意到null值是未知的,且占用空間,不走索引,dba建議建表的時候最好設定欄位是not null 來避免這種低效率的事情的發生。create table test a int 11 not null,b varc...

MYSQL NULL 對查詢的影響

在建立表時,經常要給某些列設定 not null 的約束。可是為什麼我們盡量不使用 null 呢?這裡記錄幾個簡單的例子 在使用 distinct 時,null 也被視為一類資料,null 存在於多行中時,也會被合併為一條 null 的資料.所有包含 null 的計算,結果必然是 null。如 1 ...