多多色-多人伦交性欧美在线观看-多人伦精品一区二区三区视频-多色视频-免费黄色视屏网站-免费黄色在线

國內最全IT社區平臺 聯系我們 | 收藏本站
阿里云優惠2
您當前位置:首頁 > 數據庫 > Sqlserver > SQL SERVER中的約束種類及相關使用

SQL SERVER中的約束種類及相關使用

來源:程序員人生   發布時間:2014-05-08 09:01:04 閱讀次數:3921次

  建站學院(LieHuo.Net)SQL教程 你知道SQL SERVER中約束到底有幾種嗎?你知道約束與主鍵是什么關系嗎?你知道約束該如何使用嗎?如果你對這幾個問題還有疑問,那么就請繼續往下看吧。

  SQL SERVER 2005中,約束,Constraints,顧名思義,就是按照約定來束縛某種東西。在數據庫,無非就是對存儲的數據進行束縛,當然需要按照某種既定的規則,一般是指語義的限制以及用來制約屬性上的關系。可能在平時的工作中,尤其是對開發人員來說,約束用的不是很多,更多的時候是用代碼去做一些輸入的驗證,這其實就是約束的思想,把不滿足條件的數據排除在外。其實SQL SERVER 2005也給我們提供這樣的一些約束:

  1. Check Constraints

  我相信大部分的朋友對約束的概念理解應該都是Check類型的約束,這種約束對表中的某一列的格式或者值進行限制,只有滿足條件的數據才能被寫入。比如:

  create table Goods( GoodsID int identity(1,1) primary key, Price decimal(12,4) constraint chkPrice check (Price>1000))

  上面的SQL建立了一張新表,并且對表中的列Price建立一個check約束,名叫chkPrice,它的作用就是對插入price列的數據進行判斷,如果大于1000,滿足條件就插入,否則就報錯。

  insert into Goods values(2000) (1 row(s) affected) 成功

  insert into Goods values(200) ERROR:The INSERT statement conflicted with the CHECK constraint "chkPrice". The conflict occurred in database "AdventureWorks", table "dbo.Goods", column 'Price'.

  這里順便提一下,如果我們執行了下面的代碼,結果會是怎樣呢?

  insert into goods values(null)

  如果你覺得也會報錯,那么恭喜你,你錯了。約束其實是對滿足條件,即條件表達式返回TRUE的一律通過。那么,如果結果是NULL呢?NULL在SQL SERVER里的類型是UNKNOWN,就是不知道。那我們就要把它理解成可以成為任何類型,可能為TRUE。所以在這個例子中,NULL是可以被插入的。

  2. Default Constraints

  這個約束相對簡單一些,就是事先定義一個默認值,如果在插入數據的時候沒有指定,系統會自動把事先定義好的默認值寫入對應的列。

  create table Product(ProductID int identity(1,1) primary key,ProductName varchar(80) not null,Country varchar(40) default 'China')Country這列就是一個含有Default約束的列,如果在插入一條數據的時候沒有指定值,那么系統會默認的插入China.

  insert into product values('AAA','US')insert into product(ProductName) values('BBB')結果為

   1 AAA US

   2 BBB China

  3. Unique Constraints

   Unique就是獨有的,這個約束就是確保在非主鍵列中不輸入重復的值。這一點與主鍵的概念可能有一些類似,之所以把Unique放在前面說,就是為了強調一點,如果想強制一列或者多列的組合的唯一性時,應該選擇Unique而不是主鍵。

   同時,還有一點,主鍵不能為null,但是Unique可以支持null。

  alter table product add ProductCode int null constraint pc_unique unique我們對Product表中的ProductCode列設置了unique約束,這一列的值不可重復.但允許有空值存在.

  insert into product (productname,ProductCode) values('aaa',null)OK

  第一個空值插入成功

  insert into product (productname,ProductCode) values('bbb',null)ERROR:Violation of UNIQUE KEY constraint 'pc_unique'. Cannot insert duplicate key in object 'dbo.product'.

  第二個空值插入失敗

  4. Primary Key Constraints

  主鍵約束可能是大家最為熟悉的,在數據庫的設計中,我們基本上會對每一張表建一個主鍵約束,用以把數據庫的每條記錄(行)區分開來.主鍵可以針對表中的一列或多列。但與約束不同的是,它的值不能為空。

  下面的例子是對其中一列設置主鍵:

  Create Table Users(UserID int primary key,UserName varchar(50) not null)

  下面是對多列設置主鍵:

  CREATE TABLE KeyData( FiscalYear int not null, Period int not null, DataType int not null, KeyValue int not null CONSTRAINT [PK_constraint_keydata] PRIMARY KEY CLUSTERED ( FiscalYear, Period ))

  5. Foreign Key Constraints

  前面提到約束分語義上限制和屬性關系的限制,外鍵約束就是用來限制屬性間關系的。通俗一點講,就是一張表中的某列引用了另一張表的主鍵,因為該列的值必須出自主鍵列的值。

  Create table Manager( ManagerID int primary key, ManagerName varchar(50),)上面我們建立了一個Manager的表,有一個ID列是該表的主鍵,唯一代表了每一個經理。

  下面建立了銷售區域的表,并指定每個區域有一個經理負責:

  Create Table SalesRegion( SalesRegionID int Primary Key, SalesRegionName varchar(100), ManagerID int foreign key REFERENCES Manager(ManagerID))從上面的命令中可以看出,ManagerID就是外鍵,它的作用是連接了SalesRegion與Manager兩張表,限制ManagerID在表SalesRegion中的使用,我們不能把某個區域指定給一個不存在經理負責。如果我們試圖往SalesRegion插入一條記錄,而該記錄的ManagerID是Manager表中不存在的ManagerID,系統就會報出以下的錯誤:

  The INSERT statement conflicted with the FOREIGN KEY constraint "FK__SalesRegi__Manag__3F6663D5". The conflict occurred in database "AdventureWorks", table "dbo.Manager", column 'ManagerID'.

  文章來自:http://www.cnblogs.com/PumpkinDatabase/archive/2009/07/02/1432084.html

生活不易,碼農辛苦
如果您覺得本網站對您的學習有所幫助,可以手機掃描二維碼進行捐贈
程序員人生
------分隔線----------------------------
分享到:
------分隔線----------------------------
關閉
程序員人生
主站蜘蛛池模板: 综合亚洲精品一区二区三区 | 校园春色 亚洲色图 | 性做久久 | 在线亚洲不卡 | 亚洲区在线播放 | 欧美一区二区三区在线观看 | 亚洲综合精品一区 | 日韩中文字幕视频在线 | 久久91久久91精品免费观看 | 午夜dj在线观看免费高清视频在线观看 | 一级做a爰全过程免费视频毛片 | 18videosex性加拿大 | 国产欧美在线观看视频 | 香蕉乱码成人久久天堂爱免费 | 欧美一级永久免费毛片在线 | 精品国产福利在线观看网址2022 | 99久久精品国产高清一区二区 | 日韩一区国产一级 | 天天综合亚洲国产色 | 欧美激情αv一区二区三区 欧美激情第二页 | 欧美丝袜高跟鞋一区二区 | 国产成人综合洲欧美在线 | 一级成人毛片 | 一级毛片免费观看视频 | 国产老女人 | 国产亚洲欧美在线观看的 | 综合免费一区二区三区 | 手机在线完整视频免费观看 | 2020国产v亚洲v天堂高清 | 欧美成人高清在线视频大全 | 国产美女一级做受在线观看 | 波多野结衣中文字幕视频 | 综合激情区视频一区视频二区 | 99精品国产高清一区二区 | 中文字幕在线看片 | 日韩欧美精品一区二区三区 | 中文字幕一区二区在线播放 | 免费观看一级欧美大 | 亚洲视屏在线观看 | 欧美性色黄大片www喷水 | 91中文字幕yellow字幕网 |