MySQL NULL 使用帶來的坑

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=4 DEFAULT 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 的行

比如我們執行如下語句:

 

數據庫中有三條數據,上面的 SQL 值顯示2條數據。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章