mysql 基礎篇
三正規化mysql 軍規
mysql 配置
mysql 使用者管理和許可權設定
mysql 常用函式介紹
mysql 字段型別介紹
mysql 多列排序
mysql 行轉列 列轉行
mysql null 使用帶來的坑
mysql and 和 or 聯合使用帶來的坑
mysql 觸發器的使用
null 無值(no value),它與字段包含 0 、空字串或僅僅包含空格不同。
資料庫字段允許空值,會遇到一些問題,這裡整理一些 mysql 設定列允許為 null 帶來的坑。
資料準備:
create問題一:負向查詢,不能獲取 null 值的行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);
比如查詢 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 ...