如何正確理解 SQL 中的 NULL

2021-09-05 19:38:40 字數 1366 閱讀 3555

在 sql 語句中, null 值與字元列中的空格, 數字中的零, 字元列中的 null ascii 字元都不相同. 當dbms在一列中發現乙個 null 值時, 就將其翻譯為未定義或是不可用的. dbms不能在一列中做出有關 null 的假設, 也不能假設 null 值等於 null, 造成某一列成為 null 的因素可能是: (1),值不存在;(2), 值未知; (3), 列對表不可用. 所以, 應將 null 值當作是乙個批示符, 而不是乙個值. 當dbms 在表的某一行的某一列中找到 null 值時, dbms就知道該資料已丟失或者是不可用.

一句話, null 指示這個值 "未知",原因是它可能不存在, 可能不可用, 也可能就是因為值未知.

這裡對各個環境下的 "空值" (不知道該怎樣總稱這些東西, 暫且就叫空值吧!)簡單的解釋一下:

1:真正的空值 (sql 中的 null)

等同「沒有輸入的值」,可以出現在大多數型別的字段中(如果沒有別的約束條件),sql server中表示為null,顯示為,手工在sql server企業管理器中輸入的方法是按ctrl+0。它在.net中對應system.dbnull.value。在t-sql命令中,判斷乙個值是不是空值,要用「is null」而不是「= null」;處理空值有個isnull函式,它使用指定的值替換null。用ado.net從資料庫得到的空值無法自動轉化為空字串或nothing,須手動檢測:如果得到system.dbnull.value,則賦給資料物件nothing或其它自定義的有意義的值。

2:空字串(零長度字串),只出現在字串型別(如nvarchar)的字段中,sql server中表示為』』,顯示為空白,手工在sql server企業管理器中輸入時清空乙個單元格即可。它在.net中對應system.string.empty,也就是我們常用的""。在t-sql命令中處理空字串和處理一般的字串沒什麼區別。用ado.net從資料庫得到的空字串也和一般的字串沒什麼區別。

3. vb.net中的nothing; 它其實對應於c#.net中的null(注意這個null是c#.net中的null而非sql server中null),它們在.net中是表示不引用任何物件的空引用的值,在傳入

sql server時,根據不同的上下文環境,可能存為真正的空值(比如在更新乙個字串型別的字段值時),也可能呼叫在sql server中自定義的預設值(比如傳給乙個有預設值的儲存過程引數),也可能因為無法進行型別轉換而引發.net異常。因此在用ado.net向sql server中儲存資料時,大家一定要小心使用nothing。

4.undefined 值與 null 的區別是:

一般情況下, 下列情況可使用undefined值:

(1),物件屬性不存在,

(2),宣告了變數但從未賦值。

而釋放引用,跟蹤結果為變數值等操作使用 null.

崗位理解 如何正確理解策劃崗位

策劃它到底幹什麼事情?對策劃結構進行拆分 首先我的策劃方案裡面,第一會明確我的工作目標是什麼?就是為了解決某乙個問題,那公司的問題其實不一樣的,所以要看具體問題是什麼?比如說我希望在三個月內可以幫助公司帶來10萬個使用者的訪問,那這是乙個具體問題,這是乙個流量問題,但你也可以是乙個運營型別的問題。比...

正確理解Java中的Future

說到這個相信很多剛入行的程式設計師,對這個並不是很熟悉,這個單詞的意思是未來 簡單的給它闡述一下 這是乙個物件,儲存的耗時操作給它賦的值,我們先拿到他的引用,等他有值了,就可以使用。通俗的講,就是我拿到乙個變數的引用,裡面沒有值,子執行緒計算完了,把值賦值給它,我後面就可以用,不用我一直等子執行緒執...

Linux inode的正確理解

理解inode,要從檔案儲存說起。檔案儲存在硬碟上,硬碟的最小儲存單位叫做 扇區 sector 每個扇區儲存512位元組 相當於0.5kb 作業系統讀取硬碟的時候,不會乙個個扇區地讀取,這樣效率太低,而是一次性連續讀取多個扇區,即一次性讀取乙個 塊 block 這種由多個扇區組成的 塊 是檔案訪問的...