mysql資料庫中使用null遇到的問題及解決辦法

2021-12-30 10:19:33 字數 2030 閱讀 1003

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 安裝...