當心圈套!MySQL中處置Null時需留意兩點。本站提示廣大學習愛好者:(當心圈套!MySQL中處置Null時需留意兩點)文章只能為提供參考,不一定能成為您想要的結果。以下是當心圈套!MySQL中處置Null時需留意兩點正文
MySQL數據庫是一個基於構造化數據的開源數據庫。SQL語句是MySQL數據庫中焦點說話。不外在MySQL數據庫中履行SQL語句,須要當心兩個圈套。
圈套一:空值紛歧定為空
空值是一個比擬特別的字段。在MySQL數據庫中,在分歧的情況下,空值常常代表分歧的寄義。這是MySQL數據庫的一種特征。如在通俗的字段中(字符型的數據),空值就是表現空值。然則假如將一個空值的數據拔出到TimesTamp類型的字段中,空值就紛歧定為空。此時為湧現甚麼情形呢(以下圖)?
我先創立了一個表。在這個表中有兩個字段:User_id(其數據類型是int)、Date(其數據類型是TimesTamp)。如今往這個表中拔出一筆記錄,個中往Date字段中拔出的是一個NULL空值。可是當我們查詢時,其成果顯示的倒是拔出記載確當前時光。這是怎樣一回事呢?其實這就是在MySQL數據庫中履行SQL語句時常常會碰到的一個圈套:空值紛歧定為空。在操作時,明明拔出的是一個空值的數據,然則最初查詢獲得的卻不是一個空值。
在MySQL數據庫中,NULL關於一些特別類型的列來講,其代表了一種特別的寄義,而不只僅是一個空值。關於這些特別類型的列,列位讀者重要是要記住兩個。一個就是筆者下面舉的TimesTamp數據類型。假如往這個數據類型的列中拔出Null值,則其代表的就是體系確當前時光。別的一個是具有auto_increment屬性的列。假如往這屬性的列中拔出Null值的話,則體系會拔出一個正整數序列。而假如在其他數據類型中,如字符型數據的列中拔出Null的數據,則其拔出的就是一個空值。
圈套二:空值紛歧定等於空字符
在MySQL中,空值(Null)與空字符('')雷同嗎?謎底能否定的。請年夜家先來看下圖的演示。
在統一個數據庫表中,同時拔出一個Null值的數據和一個''空字符的數據,然後應用Select語句停止查詢。最初顯示的成果如上圖所示。明顯其顯示的成果是不雷同的。從這個成果中便可以看出,空值不等於空字符。這就是在MySQL中履行SQL語句碰到的第二個圈套。在現實任務中,空值數據與空字符常常表現分歧的寄義。數據庫治理員可以依據現實的須要來停止選擇。
如關於德律風號碼等字段,可以默許設置為空值(表現基本不曉得對方的德律風號碼)或許設置為空字符(表現後來撤消了這個號碼)等等。因為他們在數據庫中會有分歧的表示情勢,所以數據庫治理員須要差別看待。筆者加倍愛好應用空值,而不是空字符。這重要是由於針對空值這個數據類型有幾個比擬特別的運算字符。假如某個字段是空字符,數據庫中是應用字段稱號來取代。相反,假如拔出的是空值,則直接顯示的是NULL。這跟其他數據庫的顯示方法也是分歧的。
一是IS NULL 和IS NOT NULL症結字。假如要斷定某個字段能否含用空值的數據,須要應用特別的症結字。個中前者表現這個字段為空,後者表現這個字段為非空。在Select語句的查詢前提中這兩個症結字異常的有效。如須要查詢一切德律風號碼為空的用戶(須要他們彌補德律風號碼信息),便可以在查詢前提中參加is not null症結字。
二是Count等統計函數,在空值上也有特別的運用。如如今須要統計用戶信息表中有德律風號碼的用戶數目,此時便可以應用count函數、同時將德律風號碼作為參數來應用。由於在統計進程中,這個函數會主動疏忽空值的數據。此時統計出來的就是有德律風號碼的用戶信息。假如采取的是空字符的數據,則這個函數會將其統計出來。以下圖所示,統計適才樹立的兩筆記錄時,體系統計的成果是1,而不是2。可見體系主動將Null值的數據疏忽失落了。
以上就是本文的全體內容,願望對年夜家的進修有所贊助,也願望年夜家多多支撐。