Sql server 2005學(xué)習筆記之約束 |
| 上傳時(shí)間:2009-04-30 | 作者:吳忠勝 | 來(lái)源:新華3++網(wǎng)絡(luò )學(xué)院 | 點(diǎn)擊: |
| 相信大家學(xué)習了數據庫后,都知道數據庫中的數據是現實(shí)世界中的反映,彼此之間可能都存在一定的聯(lián)系,例如,學(xué)生系統中學(xué)生的學(xué)號是唯一的,學(xué)生的年齡要在一定的范圍內,不可以隨意輸入的,等一些情況,這樣的例子可能現實(shí)生活中,還有很多,從這些例子中,我們可以得出一個(gè)結果,也就是一個(gè)成功的數據庫必須對這些數據進(jìn)行定義,使它們符合現實(shí),具有完整性,那么這里完整性,就是我們所說(shuō)的約束. create table stuinfo ( stuid char(8) not null, stuname nvarchar(10), stusex nvarchar(2), stuage tinyint, stuaddr varchar(50), stutel varchar(15), stuintro varchar(200) ) Stucj表: create table stucj ( stuid char(8) not null, stuname nvarchar(10), chinese numeric(4,1), english numeric(4,1), math numeric(4,1) ) 三, primary key(主鍵約束)指的是唯一能將所有記錄區分開(kāi)的字段,以上兩張表中的stuid(學(xué)生學(xué)號)可以作為主鍵,定義語(yǔ)句是: use student go alter table stuinfo add constraint pri_id1 primary key(stuid) alter table stucj add constraint pri_id2 primary key(stuid)
四.Check(核對)約束,指的是限制一列和多列所輸入的值的范圍。表中shuage字段表示的是學(xué)生的年齡,對這個(gè)字段我們可以設置它的范圍,sql 語(yǔ)句如下: Use student Go Alter table stuinfo Add constraint ch_age check(stuage>10 and stuage<50) 執行完畢后,你可以向表中添加數據,此時(shí)我們的check約束就起作用了。 五.Default(默認)約束,指的是當用戶(hù)添加數據時(shí),如果沒(méi)有給該字段添加數據時(shí),系統自動(dòng)給它一個(gè)默認值,上表中的stusex(學(xué)生性別)字段,我們就可以給它設置默認值,比如男或女,那么定義的語(yǔ)句如下: Use student Go Alter table stuinfo Add constraint def_stusex default ‘男’ for stusex 同樣再次執行,添加數據時(shí),你不添加stusex的值,看看結果。 六.Foreign key(外鍵)約束,指的是用于和加強兩張表之間的聯(lián)系,當在添加,修改和刪除數據時(shí),保持兩張表中數據的一致性。上面stuinfo表和stucj表中的stuid字段就可以設置,sql語(yǔ)句如下: Use student Go alter table stucj add constraint stu_f foreign key(stuid) references stuinfo(stuid) 執行完畢后,可以對兩張表中添加,刪除和修改數據,測試看看。 七.unique(唯一)約束,指的是讓字段的數據具有唯一性,該字段內的數據不可以發(fā)生從復,但是可以為空,而主鍵不可以為空,實(shí)際上,主鍵也就是一個(gè)唯一性約束。在這里我們把stuname(學(xué)生姓名)字段設計成unique,但是實(shí)際操作時(shí),學(xué)生姓名是可以從復的,這里我們是假設,是為把這個(gè)約束制作完。接下來(lái)我們看看sql語(yǔ)句: Use student Go alter table stuinfo add constraint un_stu unique(stuname) 同樣,執行完畢后,可以添加數據,測試看看。 以上,我們是一個(gè)一個(gè)的介紹了約束的使用,實(shí)際上在使用時(shí),可以直接在建立表時(shí)一起定義,只不過(guò)這種定義我們沒(méi)有給每一個(gè)約束命名,操作起來(lái)可能不是很方便。那么,接下來(lái)我們也來(lái)看看這種定義方式,建立一張新表stuinfo1: Use student Go create table stuinfo1 ( stuid char(8) not null primary key, stuname varchar(10) unique, stusex char(2) default '男', stuage tinyint check(stuage>10 and stuage<40), stutel char(14) ) 這種方法的缺點(diǎn)是:它的約束名不是很清楚,所以刪除時(shí)就必須要到管理視圖去操作,麻煩一點(diǎn)。下面我們來(lái)看看,用sql語(yǔ)句來(lái)刪除這些約束: Use student Go alter table stuinfo drop constraint un_stu 我們這里刪除的是unique 約束,大家可以試著(zhù)刪除其它約束。 最后,我把添加約束的格式寫(xiě)一下,便于大家參考: Alter table 表名 Add constraint 約束名 約束類(lèi)型(字段名或表達式) 刪除的格式如下: Alter table 表名 drop constraint 約束名 好了,約束的學(xué)習就到這里,在下一篇,我還會(huì )和大家共同來(lái)學(xué)習sql server 2005。
|
聯(lián)系客服