mysql資料庫中使用null可能會存在問題

2021-08-11 20:30:41 字數 2223 閱讀 7682

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

|<

null

>||

21| zhaoliu_2_1 ||22

|<

null

>

|+------+-------------+

4rows

inset

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

\g

null 列需要更多的儲存空間

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 n...

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