国产探花免费观看_亚洲丰满少妇自慰呻吟_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教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 泌阳县| 元朗区| 沧州市| 满洲里市| 高雄县| 凤城市| 蒲城县| 屏东市| 佛山市| 博罗县| 滨州市| 桑植县| 青川县| 渝北区| 衡南县| 栖霞市| 沙坪坝区| 凌海市| 洮南市| 河北区| 兴隆县| 霍山县| 合山市| 涡阳县| 讷河市| 大冶市| 宜兴市| 滨州市| 利辛县| 北票市| 肇东市| 依安县| 宁夏| 皋兰县| 乌什县| 剑阁县| 南川市| 图片| 柘荣县| 中江县| 崇左市|