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條數據。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM