国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 數據庫 > SQL Server > 正文

sql server 關于設置null的一些建議

2024-08-31 01:03:59
字體:
來源:轉載
供稿:網友

我們設計表時,在字段是否允許Null值這個問題上,有時會爭論一番。

數據庫牛人Kalen Delaney則給了一下建議:

1,永遠不要在用戶表中允許NULL值
2,在用戶表定義中包含一個NOT NULL限制
3,不要依賴數據庫屬性來控制NULL值的行為

對于第一點,我們反向說,如果允許NULL,會給我們帶來什么影響。

1,SQL 在每條記錄中都設置了一個特殊的bitmap來顯示哪些允許空值的列上存儲的真的是空值。如果是NULL,在訪問每一行的時候SQL Server都必須對這個bitmap進行解碼。
2,允許NULL還增加了應用程序代碼的復雜度,總的添加一些特殊的邏輯來處理這個NULL值,這常常會導致bug。

第二點,在包含不允許NULL的列上,要加入一些默認值,如果不允許NULL,但是還沒有加默認值,在沒有顯示列插入的話,就會造成INSERT的失敗,SQL Server默認在INSERT中,對沒有顯示的列做NULL插入。

最后一點,主要涉及到于NULL值的比較。在我們印象中,是用IS NULL,IS NOT NULL比較呢,還是用=,<>比較呢。這取決于數據庫選項ANSI NULLS,我們不可能更改數據庫選項(我們大部分不是DBA),但是我們可以使用會話設置SET ANSI_NULLS相當于數據庫選項ANSI NULLS。當這個選項為真是,所有與空值的比較都將得出FALSE,代碼必須使用IS NULL條件來判斷是否為空,而當這個選項為假時,如果進行比較的兩個值都是空值將得出TRUE,SQL Server允許將 =NULL作為IS NULL的同義詞,將<> NULL 作為IS NOT NULL的同義詞。

如果忘記這個選項,建議用IS NULL判斷空,IS NOT NULL判斷非空。

測試如下:

在t3表中只有兩行數據,如圖:

sql,null,ANSI,NULLS,bug

SET ANSI_NULLS OFF 時:

sql,null,ANSI,NULLS,bug

SET ANSI_NULLS ON 時

sql,null,ANSI,NULLS,bug

總結下來,最優的辦法是:在設計表的時候,不要允許字段為NULL,并為字段附上默認值


注:相關教程知識閱讀請移步到MSSQL教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 永川市| 太和县| 南昌县| 新巴尔虎左旗| 松潘县| 衡东县| 阿合奇县| 苍溪县| 习水县| 拉萨市| 华安县| 孟连| 小金县| 家居| 达州市| 蒙阴县| 宁明县| 乃东县| 黄浦区| 石屏县| 开阳县| 高陵县| 大田县| 新和县| 吴江市| 台南县| 南乐县| 四子王旗| 新兴县| 凭祥市| 都安| 城口县| 保德县| 阿拉善左旗| 河曲县| 邯郸县| 海口市| 巴彦淖尔市| 民勤县| 桑日县| 龙里县|