欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

一文帶你探究MySQL中的NULL

 更新時間:2021年11月09日 15:49:27   作者:CoderJie  
我們在日常工作中如果要接觸Mysql數(shù)據(jù)庫,那么不可避免會遇到Mysql中,下面這篇文章主要給大家介紹了關(guān)于MySQL中NULL的相關(guān)資料,文中通過示例代碼介紹的非常詳細,需要的朋友可以參考下

前言

不知道大家有沒有遇到這樣的問題,當我們在對MySQL數(shù)據(jù)庫進行查詢操作時,條件寫的是status!=1,理論上會將所有不符合條件的查詢出來,但奇怪的是結(jié)果為NULL的就查不出來,必須得拼接上條件or status IS NULL。本篇文章我們就一起探究一下MySQL中的NULL。

1 MySQL 中的NULL

對MySQL來說,NULL是一個特殊的值。

NULL表示不可知不確定,NULL不與任何值相等(包括其本身)

2 NULL占用的長度

NULL在數(shù)據(jù)庫中占用的長度

mysql>  select length(NULL), length(''), length('1');
+--------------+------------+-------------+
| length(NULL) | length('') | length('1') |
+--------------+------------+-------------+
| NULL         |          0 |           1 |
+--------------+------------+-------------+

NULL columns require additional space in the row to record whether their values are NULL.

可以看出空值''的長度是0,是不占用空間的;而的NULL長度是NULL,是需要占用額外空間的,所以在一些開發(fā)規(guī)范中,建議將數(shù)據(jù)庫字段設(shè)置為Not NULL,并且設(shè)置默認值''或0。

3 對NULL值的比較

IS NULL 判斷某個字符是否為空,并不代表空字符或者是0

SQL92標準中說道,!=NULL 條件判斷永遠返回false,聚合運算永遠返回0

當然在數(shù)據(jù)庫中可以使用SET ANSI_NULLS OFF關(guān)閉標準模式,但一般不建議這樣去做

所以,要判斷一個數(shù)是否等于NULL只能用 IS NULL 或者 IS NOT NULL 來判斷

4 SQL對NULL值進行處理

MySQL中專門為我們提供了IFNULL(expr1,expr2)這個函數(shù),讓我們可以輕松的處理數(shù)據(jù)中的NULL

IFNULL有兩個參數(shù)。 如果第一個參數(shù)字段不是NULL,則返回第一個字段的值。 否則,IFNULL函數(shù)返回第二個參數(shù)的值(默認值)。

select IFNULL(status,0) From t_user;

5 值為NULL 對查詢條件的影響

  • 不能使用=,<,>這樣的運算符,對NULL做算術(shù)運算的結(jié)果都是NULL(所以說當status為NULL時,status!=1不會統(tǒng)計到NULL)
  • 使用COUNT(expr) 統(tǒng)計時,也不會統(tǒng)計該字段為NULL的數(shù)據(jù)

6 值為NULL對索引的影響

首先需要注意的一點是,MySQL中某一列數(shù)據(jù)含有NULL,并不一定會造成索引失效。

MySQL可以在含有NULL的列上使用索引

在有NULL值得字段上使用常用的索引,如普通索引、復(fù)合索引、全文索引等不會使索引失效。但是在使用空間索引的情況下,該列就必須為 NOT NULL。

7 值為NULL對排序的影響

在ORDER BY排序的時候,如果存在NULL值,那么NULL是最小的,ASC正序排序的話,NULL值是在最前面的

如果我們需要在正序排序時,將NULL值放在后邊,這里我們就需要巧借IS NULL

select * from t_user order by age is null, age; 
或者
select * from t_user order by isnull(name), age; 
# 等價于
select * from (select name, age, (age is null) as isnull from t_user) as foo order by isnull, age; 

8 NULL和空值區(qū)別

NULL也就是在字段中存儲NULL值,空值也就是字段中存儲空字符('')。

1、占用空間區(qū)別

mysql>  select length(NULL), length(''), length('1');
+--------------+------------+-------------+
| length(NULL) | length('') | length('1') |
+--------------+------------+-------------+
| NULL         |          0 |           1 |
+--------------+------------+-------------+
1 row in set

小總結(jié):從上面看出空值('')的長度是0,是不占用空間的;而的NULL長度是NULL,其實它是占用空間的,看下面說明。

NULL columns require additional space in the row to record whether their values are NULL.

NULL列需要行中的額外空間來記錄它們的值是否為NULL。

通俗的講:空值就像是一個真空轉(zhuǎn)態(tài)杯子,什么都沒有,而NULL值就是一個裝滿空氣的杯子,雖然看起來都是一樣的,但是有著本質(zhì)的區(qū)別。

總結(jié)

到此這篇關(guān)于MySQL中NULL的文章就介紹到這了,更多相關(guān)MySQL中的NULL內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 詳解Mysql中tinyint與int的區(qū)別

    詳解Mysql中tinyint與int的區(qū)別

    本文詳細講解了Mysql中tinyint與int的區(qū)別,對大家的學(xué)習或者工作具有一定的參考學(xué)習價值,需要的朋友們下面隨著小編來一起學(xué)習學(xué)習吧
    2021-12-12
  • MySQL5.7免安裝版配置圖文教程

    MySQL5.7免安裝版配置圖文教程

    Mysql是一個比較流行且很好用的一款數(shù)據(jù)庫軟件,如下記錄了我學(xué)習總結(jié)的mysql免安裝版的配置經(jīng)驗,感興趣的的朋友參考下吧
    2017-09-09
  • mysql 獲取當天發(fā)布的信息的語句

    mysql 獲取當天發(fā)布的信息的語句

    mysql 獲取當天發(fā)布的信息的實現(xiàn)語句,需要的朋友可以參考下。
    2010-03-03
  • mysql導(dǎo)入導(dǎo)出數(shù)據(jù)中文亂碼解決方法小結(jié)

    mysql導(dǎo)入導(dǎo)出數(shù)據(jù)中文亂碼解決方法小結(jié)

    本文章總結(jié)了mysql導(dǎo)入導(dǎo)出數(shù)據(jù)中文亂碼解決方法,出現(xiàn)中文亂碼一般情況是導(dǎo)入導(dǎo)入時編碼的設(shè)置問題,我們只要把編碼調(diào)整一致即可解決此方法,下面是搜索到的一些方法總結(jié),方便需要的朋友
    2012-10-10
  • mysql 8.0.11安裝教程圖文解說

    mysql 8.0.11安裝教程圖文解說

    本文通過圖文并茂的形式給大家介紹了mysql 8.0.11安裝教程,非常不錯,具有一定的參考借鑒價值 ,需要的朋友可以參考下
    2019-04-04
  • MySQL數(shù)據(jù)庫子查詢語法規(guī)則詳解

    MySQL數(shù)據(jù)庫子查詢語法規(guī)則詳解

    子查詢是在查詢語句里面再嵌套一個查詢,這是因為我們在提取數(shù)據(jù)的時候有很多不知道的數(shù)據(jù)產(chǎn)生了依賴關(guān)系。本文為大家總結(jié)了一下MySQL數(shù)據(jù)庫子查詢語法規(guī)則,感興趣的可以了解一下
    2022-08-08
  • SQL語法CONSTRAINT約束操作詳情

    SQL語法CONSTRAINT約束操作詳情

    這篇文章主要介紹了SQL語法CONSTRAINT約束操作詳情,CONSTRAINT,約束,即對數(shù)據(jù)庫表中的數(shù)據(jù)進行約束,以保證數(shù)據(jù)記錄的完整性和有效性。下面來看看文章的學(xué)習介紹吧
    2022-01-01
  • 淺談mysql的timestamp存在的時區(qū)問題

    淺談mysql的timestamp存在的時區(qū)問題

    本文主要介紹了淺談mysql的timestamp存在的時區(qū)問題,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習或者工作具有一定的參考學(xué)習價值,需要的朋友們下面隨著小編來一起學(xué)習學(xué)習吧
    2022-07-07
  • 淺談Mysql時間的存儲?datetime還是時間戳timestamp

    淺談Mysql時間的存儲?datetime還是時間戳timestamp

    本文主要介紹了淺談Mysql時間的存儲?datetime還是時間戳timestamp,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習或者工作具有一定的參考學(xué)習價值,需要的朋友們下面隨著小編來一起學(xué)習學(xué)習吧
    2022-07-07
  • MySQL 的啟動選項和系統(tǒng)變量實例詳解

    MySQL 的啟動選項和系統(tǒng)變量實例詳解

    這篇文章主要介紹了MySQL 的啟動選項和系統(tǒng)變量,結(jié)合實例形式詳細分析了MySQL 啟動選項和系統(tǒng)變量具體原理、功能、用法及操作注意事項,需要的朋友可以參考下
    2020-05-05

最新評論