not in、!= 等負向條件查詢在有 null 值的情況下返回永遠為空結果,查詢容易出錯
舉例說明
create table table_2 (
`id` int (11) not null,
user_name varchar(20) not null
)create table table_3 (
`id` int (11) not null,
user_name varchar(20)
)insert into table_2 values (4,"zhaoliu_2_1"),(2,"lisi_2_1"),(3,"wangmazi_2_1"),(1,"zhangsan_2"),(2,"lisi_2_2"),(4,"zhaoliu_2_2"),(3,"wangmazi_2_2")
insert into table_3 values (1,"zhaoliu_2_1"),(2, null)
-- 1、not in子查詢在有null值的情況下返回永遠為空結果,查詢容易出錯
select user_name from table_2 where user_name not in (select user_name from table_3 where id!=1)
+-------------+
| user_name |
|-------------|
+-------------+
-- 2、單列索引不存null值,復合索引不存全為null的值,如果列允許為null,可能會得到「不符合預期」的結果集
-- 如果name允許為null,索引不儲存null值,結果集中不會包含這些記錄。所以,請使用not null約束以及預設值。
select * from table_3 where name != 'zhaoliu_2_1'
empty set (0.00 sec)
-- 3、如果在兩個字段進行拼接:比如題號+分數,首先要各欄位進行非null判斷,否則只要任意乙個欄位為空都會造成拼接的結果為null。
select concat("1",null) from dual; -- 執行結果為null。
-- 4、如果有 null column 存在的情況下,count(null column)需要格外注意,null 值不會參與統計。
select * from table_3;
+------+-------------+
| id | user_name |
|------+-------------|
| 1 | zhaoliu_2_1 |
| 2 | |
| 21 | zhaoliu_2_1 |
| 22 | |
+------+-------------+
4 rows in set
select count(user_name) from table_3;
+--------------------+
| count(user_name) |
|--------------------|
| 2 |
+--------------------+
-- 5、注意 null 欄位的判斷方式, = null 將會得到錯誤的結果。
create index idx_test on table_3 (user_name);
select * from table_3 where user_name is null\g
select * from table_3 where user_name = null\g
desc select * from table_3 where user_name = 'zhaoliu_2_1'\g
desc select * from table_3 where user_name = null\g
desc select * from table_3 where user_name is null\gnull 列需要更多的儲存空間
mysql資料庫中使用null可能會存在問題
not in 等負向條件查詢在有 null 值的情況下返回永遠為空結果,查詢容易出錯 create table table 2 id int 11 not null,user name varchar 20 not null create table table 3 id int 11 not nu...
QT中使用MySQL資料庫
1.鏈結mysql 首先正確安裝mysql資料庫。然後將libmysql.lib檔案放在qt安裝路徑下的對應編譯器的lib資料夾下,如f software qt5.9.5 5.9.5 mingw53 32 lib。將libmysql.dll檔案放在qt安裝路徑對應編譯器的bin資料夾下。最後可正常鏈...
C 中使用mysql資料庫方法
通過vc開發mysql資料庫應用軟體有多種方式 一 通過myodbc介面 二 通過connector c l介面 三 通過mysql c api介面 四 第三方封裝的mysql類 在經過反覆比較,我還是選擇了mysql c api方式來進行mysql的開發。在vc中使用mysql的步驟如下 2 安裝...