起因,我設計數據庫的時候一般情況下默認是不願意讓字段為空的,因為is null這樣的話,是不走索引。所以我基本上設置了不為空。
因為設置了不為空,所以sql也要和原來的is null 變成="".之前用的逆向工程的andisnull查詢就會失效。
1.創建數據庫
2.創建腳本
CREATE TABLE `user` ( `id` bigint NOT NULL, `name` varchar(255) COLLATE utf8mb4_general_ci NOT NULL, PRIMARY KEY (`id`), KEY `PK_name` (`name`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
3.給name增加索引
初始化數據
4.腳本測試
EXPLAIN select * from `user` where id=3 and name=""
走索引了,並且數據查詢出來了
EXPLAIN select * from `user` where id=3 and name is null
沒有走索引,數據還沒有查詢出來。
結論:大家在設計數據庫,字段不為null的時候,一定要記得額使用="",不要使用 is null.
對於身份證這些需要建立唯一索引的字段不能使用空字符串表示,只能設置字段為null。