版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
項(xiàng)目四網(wǎng)上書(shū)城數(shù)據(jù)庫(kù)表的管理項(xiàng)目四網(wǎng)上書(shū)城數(shù)據(jù)庫(kù)表的管理項(xiàng)目知識(shí)要點(diǎn)項(xiàng)目知識(shí)要點(diǎn)單詞學(xué)習(xí)1.Constraint:約束2.PrimaryKey:主鍵3.ForeignKey:外鍵4.Binary:二進(jìn)制5.Check:檢查6.Unique:唯一7.Alter:修改8.Insert:插入9.Update:更新10.Delete:刪除單詞學(xué)習(xí)1.Constraint:約束掌握數(shù)據(jù)表的基礎(chǔ)知識(shí)表的定義表是包含數(shù)據(jù)庫(kù)中所有數(shù)據(jù)的數(shù)據(jù)庫(kù)對(duì)象。在表中,數(shù)據(jù)成二維行列格式,每一行代表一個(gè)唯一的記錄,每一列代表一個(gè)域。表4-1顧客信息表掌握數(shù)據(jù)表的基礎(chǔ)知識(shí)表的定義表4-1顧客信息表掌握數(shù)據(jù)表的基礎(chǔ)知識(shí)列名列名是用來(lái)訪問(wèn)表中具體域的標(biāo)識(shí)符,列名必須遵循下列規(guī)則:(1)列名是可以含有從1到128的ASCII碼字符,它的組成包括字母、下劃線、符號(hào)以及數(shù)字。(2)不要給列名命名為與SQL關(guān)鍵字相同的名字,比如SELECT,IN,DESC等。(3)列名應(yīng)該反映數(shù)據(jù)的屬性。掌握數(shù)據(jù)表的基礎(chǔ)知識(shí)列名SQLServer的數(shù)據(jù)類型分類備注和說(shuō)明數(shù)據(jù)類型說(shuō)明二進(jìn)制數(shù)據(jù)類型存儲(chǔ)非子符和文本的數(shù)據(jù)Image可用來(lái)存儲(chǔ)圖像文本數(shù)據(jù)類型字符數(shù)據(jù)包括任意字母、符號(hào)或數(shù)字字符的組合Char固定長(zhǎng)度的非Unicode字符數(shù)據(jù)Varchar可變長(zhǎng)度非Unicode數(shù)據(jù)Nchar固定長(zhǎng)度的Unicode數(shù)據(jù)Nvarchar可變長(zhǎng)度Unicode數(shù)據(jù)Text存儲(chǔ)長(zhǎng)文本信息Ntext存儲(chǔ)可變長(zhǎng)度的長(zhǎng)文本日期和時(shí)間日期和時(shí)間在單引號(hào)內(nèi)輸入Datetime日期和時(shí)間數(shù)字?jǐn)?shù)據(jù)該數(shù)據(jù)僅包含數(shù)字,包括正數(shù)、負(fù)數(shù)以及分?jǐn)?shù)intsmallint整數(shù)floatreal數(shù)字貨幣數(shù)據(jù)類型用于十進(jìn)制貨幣值MoneyBit數(shù)據(jù)類型表示是/否的數(shù)據(jù)Bit存儲(chǔ)布爾數(shù)據(jù)類型SQLServer的數(shù)據(jù)類型分類備注和說(shuō)明數(shù)據(jù)類型說(shuō)明二進(jìn)思考電話號(hào)碼一般使用什么數(shù)據(jù)類型存儲(chǔ)?性別一般使用什么數(shù)據(jù)類型存儲(chǔ)?年齡信息一般使用什么數(shù)據(jù)類型存儲(chǔ)?照片信息一般使用什么數(shù)據(jù)類型存儲(chǔ)?薪水一般使用什么數(shù)據(jù)類型存儲(chǔ)?思考電話號(hào)碼一般使用什么數(shù)據(jù)類型存儲(chǔ)?網(wǎng)上書(shū)城數(shù)據(jù)表的設(shè)計(jì)與創(chuàng)建表的設(shè)計(jì)步驟(1)表的命名方式。(2)表中每一列的名稱、數(shù)據(jù)類型及其長(zhǎng)度。(3)表中的列是否允許空值,是否唯一,是否要進(jìn)行默認(rèn)設(shè)置或添加用戶定義約束。(4)表間的關(guān)系,即確定哪些列是主鍵,哪些是外鍵。網(wǎng)上書(shū)城數(shù)據(jù)表的設(shè)計(jì)與創(chuàng)建表的設(shè)計(jì)步驟項(xiàng)目中的部分表
顧客信息表(Customers)項(xiàng)目中的部分表顧客信息表(Customers)項(xiàng)目中的部分表訂單信息表(Orders)項(xiàng)目中的部分表訂單信息表(Orders)項(xiàng)目中的部分表訂單詳細(xì)表(OrderDetails)項(xiàng)目中的部分表訂單詳細(xì)表(OrderDetails)創(chuàng)建數(shù)據(jù)庫(kù)表使用SSMS向?qū)?chuàng)建表
【例4-2-1】在SQLServer2005中使用“SQLServerManagementStudio”創(chuàng)建BookShop數(shù)據(jù)庫(kù)中的Customers表(顧客信息表)。創(chuàng)建數(shù)據(jù)庫(kù)表使用SSMS向?qū)?chuàng)建表詳細(xì)步驟如下:(1)啟動(dòng)SSMS,登錄服務(wù)器類型為【數(shù)據(jù)庫(kù)引擎】,并使用Windows或SQLServer身份認(rèn)證建立連接。(2)在“對(duì)象資源管理器”中依次展開(kāi)【數(shù)據(jù)庫(kù)】節(jié)點(diǎn)、【BookShop】節(jié)點(diǎn),右鍵單擊【表】節(jié)點(diǎn),選擇【新建表】命令,如圖4-1所示。圖4-1選擇“新建表”詳細(xì)步驟如下:圖4-1選擇“新建表”
(3)打開(kāi)【表設(shè)計(jì)器】窗口,在【列名】下的編輯框中輸入列名“CID”,然后點(diǎn)擊【數(shù)據(jù)類型】下的下拉框,拖動(dòng)下拉框的滾動(dòng)條,選擇“char(10)”,如圖4-2所示。圖4-2表設(shè)計(jì)器(3)打開(kāi)【表設(shè)計(jì)器】窗口,在【列名】下的編輯框中
(4)在“表設(shè)計(jì)器”窗口的【列屬性】選項(xiàng)卡中的【長(zhǎng)度】域的編輯框中輸入6,如圖4-3所示。輸入完畢后,再看【數(shù)據(jù)類型】下的下拉框內(nèi)容由char(10)變?yōu)閏har(6)。(5)單擊“表設(shè)計(jì)器”窗口的【允許空】列中的小方框,使得小方框中√去掉,就符合了“CID”列不允許為空的要求。圖4-3修改字符類型長(zhǎng)度(4)在“表設(shè)計(jì)器”窗口的【列屬性】選項(xiàng)卡中(6)類似地,重復(fù)步驟(2)~(5),在“表設(shè)計(jì)器”窗口添加顧客信息表的其它7個(gè)字段,效果如圖4-4所示。圖4-4顧客信息表8個(gè)字段(6)類似地,重復(fù)步驟(2)~(5),在“表設(shè)計(jì)器”窗口添加
(7)設(shè)置主鍵。在“表設(shè)計(jì)器”窗口中選定第一個(gè)字段“CID”,再執(zhí)行菜單命令【表設(shè)計(jì)器】→【設(shè)置主鍵】即可按要求將字段“CID”設(shè)為主鍵,如圖4-5所示。圖4-5設(shè)置顧客信息表的主鍵(7)設(shè)置主鍵。在“表設(shè)計(jì)器”窗口中選定第一個(gè)(8)修改表名稱。在“表設(shè)計(jì)器”窗口右側(cè)“屬性”面板中【名稱】域的編輯框中輸入表名稱“Customers”,如圖4-6所示。表名稱輸入完后不是立即生效的,要在保存表后,表名稱修改才能生效。圖4-6修改表名稱(8)修改表名稱。在“表設(shè)計(jì)器”窗口右側(cè)“屬性”面板中【名稱
(9)保存表。單擊工具欄中的【保存】按鈕即可以保存表。新表創(chuàng)建后,在“對(duì)象資源管理器”中展開(kāi)【數(shù)據(jù)庫(kù)】節(jié)點(diǎn)中的數(shù)據(jù)庫(kù)節(jié)點(diǎn)【BookShop】,可以查看到剛才所建的表,如圖4-7所示。圖4-7創(chuàng)建好的Customers表(9)保存表。單擊工具欄中的【保存】按鈕即可以保
使用CREATETABLE語(yǔ)句創(chuàng)建表CREATETABLE<表名>(<列名><數(shù)據(jù)類型>[列級(jí)完整性約束條件][,<列名><數(shù)據(jù)類型>[列級(jí)完整性約束條件]...][,<表級(jí)完整性約束條件>])使用CREATETABLE語(yǔ)句創(chuàng)建表CREATETAB使用CREATETABLE語(yǔ)句創(chuàng)建表【例4-2-3】為了保存顧客基本信息,需要在BookShop數(shù)據(jù)庫(kù)中創(chuàng)建一個(gè)名為“Customers”的表,使用T-SQL語(yǔ)句完成創(chuàng)建表的過(guò)程。使用CREATETABLE語(yǔ)句創(chuàng)建表【例4使用CREATETABLE語(yǔ)句創(chuàng)建表詳細(xì)步驟如下:(1)成功登錄SQLServer服務(wù)器后,在SSMS界面中,單擊【新建查詢】按鈕,打開(kāi)一個(gè)SQLQuery窗口。(2)在SQLQuery窗口輸入如下命令,然后單擊按鈕,分析輸入的T-SQL語(yǔ)法是否有錯(cuò),然后再點(diǎn)擊【執(zhí)行】按鈕,即能創(chuàng)建好顧客信息表。如圖4-13所示。使用CREATETABLE語(yǔ)句創(chuàng)建表詳細(xì)步驟如下:使用CREATETABLE語(yǔ)句創(chuàng)建表UseBookShop--打開(kāi)數(shù)據(jù)庫(kù)Go--批處理結(jié)束語(yǔ)句CREATETABLECustomers(CIDchar(6)NOTNULLPRIMARYKEY,--PRIMARYKEY表示主鍵CTrueNamevarchar(30)NOTNULL,Cpasswordvarchar(30)NOTNULL,CSexchar(2)NOTNULL,CAddressvarchar(50)NULL,CMobilevarchar(11)NOTNULL,CEmailvarchar(50)NULL,CRegisterDatedatetimeNOTNULL)使用CREATETABLE語(yǔ)句創(chuàng)建表UseBookSh使用CREATETABLE語(yǔ)句創(chuàng)建表在SQLQuery窗口輸入T-SQL命令使用CREATETABLE語(yǔ)句創(chuàng)建表在SQLQuery窗口如果當(dāng)前數(shù)據(jù)庫(kù)中已存在Customers表,再次創(chuàng)建時(shí)系統(tǒng)將提示出錯(cuò)。如何解決呢?USEBookShop--將當(dāng)前數(shù)據(jù)庫(kù)設(shè)置為BookShop,以便在BookShop數(shù)據(jù)庫(kù)中建表GOIFEXISTS(SELECT*FROMsysobjectsWHEREname=’Customers’)
DROPTABLECustomersCREATETABLECustomers/*-創(chuàng)建顧客表-*/(…..)GO如果當(dāng)前數(shù)據(jù)庫(kù)中已存在Customers表,再次創(chuàng)建時(shí)系統(tǒng)將標(biāo)識(shí)列表中沒(méi)有合適的列作為主鍵怎么辦?標(biāo)識(shí)列表中沒(méi)有合適的列作為主鍵怎么辦?標(biāo)識(shí)列USEstuDB--將當(dāng)前數(shù)據(jù)庫(kù)設(shè)置為stuDBGOCREATETABLEstuInfo
/*-創(chuàng)建學(xué)員信息表-*/(
stuNameVARCHAR(20)NOTNULL,--姓名,非空(必填)stuNoCHAR(6)NOTNULL,--學(xué)號(hào),非空(必填)stuAgeINTNOTNULL,--年齡,INT類型默認(rèn)為4個(gè)字節(jié)stuSeatSMALLINTIDENTITY(1,1),--座位號(hào),自動(dòng)編號(hào)
stuAddressTEXT--住址,允許為空,即可選輸入)GOIDENTITY(起始值,遞增量)標(biāo)識(shí)列USEstuDB--將當(dāng)前數(shù)據(jù)庫(kù)設(shè)置為stuD思考標(biāo)識(shí)列允許為字符數(shù)據(jù)類型嗎?如果標(biāo)識(shí)列A的初始值為1,增長(zhǎng)量為2,則輸入三行數(shù)據(jù)以后,再刪除兩行,下次再輸入數(shù)據(jù)行的時(shí)候,標(biāo)識(shí)值從多少開(kāi)始?思考標(biāo)識(shí)列允許為字符數(shù)據(jù)類型嗎?數(shù)據(jù)完整性數(shù)據(jù)完整性是指數(shù)據(jù)庫(kù)中數(shù)據(jù)的準(zhǔn)確性和一致性。如果兩個(gè)或更多的表由于其存儲(chǔ)的信息而相互關(guān)聯(lián),那么只要修改了其中一個(gè)表,與之相關(guān)的所有表都要做出相應(yīng)的修改,如果不這么做,存儲(chǔ)的數(shù)據(jù)就會(huì)不再準(zhǔn)確。也就是說(shuō),推動(dòng)了數(shù)據(jù)的完整性。數(shù)據(jù)完整性主要分為四類:實(shí)體完整性、域完整性、引用完整性和用戶定義完整性。數(shù)據(jù)完整性數(shù)據(jù)完整性是指數(shù)據(jù)庫(kù)中數(shù)據(jù)的準(zhǔn)確性和一致性。如果兩數(shù)據(jù)完整性數(shù)據(jù)存放在表中“數(shù)據(jù)完整性的問(wèn)題大多是由于設(shè)計(jì)引起的”創(chuàng)建表的時(shí)候,就應(yīng)當(dāng)保證以后數(shù)據(jù)輸入是正確的
——錯(cuò)誤的數(shù)據(jù)、不符合要求的數(shù)據(jù)不允許輸入創(chuàng)建表:保證數(shù)據(jù)的完整性=實(shí)施完整性約束數(shù)據(jù)完整性數(shù)據(jù)存放在表中創(chuàng)建表:保證數(shù)據(jù)的完整性=實(shí)施完完整性包括…2-1輸入的類型是否正確?——年齡必須是數(shù)字輸入的格式是否正確?——身份證號(hào)碼必須是18位是否在允許的范圍內(nèi)?——性別只能是”男”或者”女”是否存在重復(fù)輸入?——學(xué)員信息輸入了兩次是否符合其他特定要求?——信譽(yù)值大于5的用戶才能夠加入會(huì)員列表……列值要求(約束)整行要求(約束)完整性包括…2-1輸入的類型是否正確?列值要求(約束)整行要完整性包括…2-2域完整性實(shí)體完整性引用完整性自定義完整性完整性包括…2-2域完整性實(shí)體完整性引用完整性自定義完整性實(shí)體完整性河南新鄉(xiāng)趙可以0010016河南新鄉(xiāng)張麗鵑0010015江西南昌雷銅0010014湖南新田吳蘭0010013山東定陶李山0010012….地址姓名學(xué)號(hào)江西南昌雷銅0010014×約束方法:唯一約束、主鍵約束、標(biāo)識(shí)列實(shí)體完整性河南新鄉(xiāng)趙可以0010016河南新鄉(xiāng)張麗鵑0010域完整性河南新鄉(xiāng)趙可以0010016河南新鄉(xiāng)張麗鵑0010015江西南昌雷銅0010014湖南新田吳蘭0010013山東定陶李山0010012….地址姓名學(xué)號(hào)湖北江門(mén)李亮8700000000×約束方法:限制數(shù)據(jù)類型、檢查約束、外鍵約束、默認(rèn)值、非空約束域完整性河南新鄉(xiāng)趙可以0010016河南新鄉(xiāng)張麗鵑00100引用完整性河南新鄉(xiāng)趙可以0010016河南新鄉(xiāng)張麗鵑0010015江西南昌雷銅0010014湖南新田吳蘭0010013山東定陶李山0010012…地址姓名學(xué)號(hào)980010021數(shù)學(xué)×約束方法:外鍵約束科目學(xué)號(hào)分?jǐn)?shù)…數(shù)學(xué)001001288數(shù)學(xué)001001374語(yǔ)文001001267語(yǔ)文001001381數(shù)學(xué)001001698引用完整性河南新鄉(xiāng)趙可以0010016河南新鄉(xiāng)張麗鵑0010自定義完整性AV121322喬峰CV0016AV372133玄痛CV0015AV378291沙悟凈AV0014AV378290豬悟能AV0013AV378289孫悟空AV0012….會(huì)員證用戶姓名用戶編號(hào)約束方法:規(guī)則、存儲(chǔ)過(guò)程、觸發(fā)器帳號(hào)姓名信用….00192孫悟空700288豬悟能612333段譽(yù)890111虛竹4093000岳不群-10×觸發(fā)器:檢查信用值自定義完整性AV121322喬峰CV0016AV372133思考學(xué)員姓名允許為空嗎?家庭地址允許為空嗎?電子郵件信息允許為空嗎?考試成績(jī)?cè)试S為空嗎?思考學(xué)員姓名允許為空嗎?思考在主鍵列輸入的數(shù)值,允許為空嗎?一個(gè)表可以有多個(gè)主鍵嗎?在一個(gè)學(xué)校數(shù)據(jù)庫(kù)中,如果一個(gè)學(xué)校內(nèi)允許重名的學(xué)員,但是一個(gè)班級(jí)內(nèi)不允許學(xué)員重名,可以組合班級(jí)和姓名兩個(gè)字段一起來(lái)作為主鍵嗎?思考在主鍵列輸入的數(shù)值,允許為空嗎?選擇主鍵的原則最少性盡量選擇單個(gè)鍵作為主鍵穩(wěn)定性盡量選擇數(shù)值更新少的列作為主鍵選擇主鍵的原則最少性SQLServer的約束約束的目的:確保表中數(shù)據(jù)的完整型常用的約束類型:主鍵約束(PrimaryKeyConstraint):要求主鍵列數(shù)據(jù)唯一,并且不允許為空唯一約束(UniqueConstraint):要求該列唯一,允許為空,但只能出現(xiàn)一個(gè)空值。檢查約束(CheckConstraint):某列取值范圍限制、格式限制等,如有關(guān)年齡的約束默認(rèn)約束(DefaultConstraint):某列的默認(rèn)值,如我們的男性學(xué)員較多,性別默認(rèn)為“男”外鍵約束(ForeignKeyConstraint):用于兩表間建立關(guān)系,需要指定引用主表的那列SQLServer的約束約束的目的:確保表中數(shù)據(jù)的完整型約束名的取名規(guī)則推薦采用:約束類型_約束字段主鍵(PrimaryKey)約束:如PK_stuNo唯一(UniqueKey)約束:如
UQ_stuID默認(rèn)(DefaultKey)約束:如DF_stuAddress檢查(CheckKey)約束:如
CK_stuAge外鍵(ForeignKey)約束:如FK_stuNo
約束名的取名規(guī)則推薦采用:約束類型_約束字段PRIMARYKEY約束PRIMARYKEY約束表的一列或幾列的組合的值在表中唯一地指定一行記錄,這樣的一列或多列稱為表的主鍵(PRIMARYKEY),通過(guò)它可強(qiáng)制表的實(shí)體完整性。
【例4-3-1】使用PRIMARYKEY約束對(duì)數(shù)據(jù)庫(kù)BookShop實(shí)施數(shù)據(jù)完整性。PRIMARYKEY約束PRIMARYKEY約束1.使用SQLServerManagementStudio管理PRIMARYKEY約束(1)啟動(dòng)SSMS,進(jìn)入新建表,如果表已經(jīng)建立好,則進(jìn)入修改表的狀態(tài),如圖4-11所示。(2)單擊要設(shè)置的PRIMARYKEY約束的列,例如:CID,選擇工具欄上的按鈕(也可以右鍵選擇【設(shè)置主鍵】選項(xiàng)),創(chuàng)建主鍵約束。如圖4-12所示。(3)創(chuàng)建主鍵結(jié)束后,在對(duì)應(yīng)的列名前有標(biāo)志,此時(shí),該列的【允許空】也改變?yōu)椤胺强铡?,如圖4-13所示。1.使用SQLServerManagementStud圖4-11選擇修改表圖4-11選擇修改表圖4-12選擇設(shè)置主鍵圖4-12選擇設(shè)置主鍵圖4-13創(chuàng)建PRIMARYKEY約束圖4-13創(chuàng)建PRIMARYKEY約束使用T-SQL管理PRIMARYKEY約束CREATETABLECustomers(CIDchar(6)NOTNULLConstraintPK_CIDPRIMARYKEY,CTrueNamevarchar(30)NOTNULL,Cpasswordvarchar(30)NOTNULL,CSexchar(2)NOTNULL,CAddressvarchar(50)NULL,CMobilevarchar(11)NOTNULL,CEmailvarchar(50)NULL,CRegisterDatedatetimeNOTNULL)使用T-SQL管理PRIMARYKEY約束CREATET如果在訂單詳情表中不設(shè)置編號(hào),則可以將表中“訂單編號(hào)+商品編號(hào)”作為訂單詳情的唯一標(biāo)識(shí),在創(chuàng)建數(shù)據(jù)表OrderDetails時(shí),為OID和GID的組合設(shè)置PRIMARYKEY約束。完成語(yǔ)句如下所示。USEBookShopGOCREATETABLEOrderDetails(OIDchar(14)NOTNULL,GIDchar(6)NOTNULL,OdPricefloatNOTNULL,OdNumberintNOTNULL,CONSTRAINTPK_OID_GIDPRIMARYKEY(OID,GID))如果在訂單詳情表中不設(shè)置編號(hào),則可以將表中“訂單編號(hào)+商品編圖4-14組合主鍵
圖4-14組合主鍵FOREIGNKEY約束
FOREIGNKEY約束標(biāo)識(shí)表之間的關(guān)系,用于強(qiáng)制參照完整性,為表中一列或者多列數(shù)據(jù)提供參照完整性。FOREIGNKEY約束也可以參照自身表中的其他列,這種參照稱為自參照。FOREIGNKEY約束主外鍵關(guān)系-1演示建立數(shù)據(jù)庫(kù)關(guān)系圖……主外鍵關(guān)系-1演示建立數(shù)據(jù)庫(kù)關(guān)系圖……主外鍵關(guān)系-2演示建立主-外鍵關(guān)系……主外鍵關(guān)系-2演示建立主-外鍵關(guān)系……主外鍵關(guān)系-3當(dāng)主表中沒(méi)有對(duì)應(yīng)的記錄時(shí),不能將記錄添加到子表
——訂單表中不能出現(xiàn)在顧客表中不存在的客戶;不能更改主表中的值而導(dǎo)致子表中的記錄孤立
——把顧客表中的客戶編號(hào)改變了,訂單表中的顧客編號(hào)也應(yīng)當(dāng)隨之改變;子表存在與主表對(duì)應(yīng)的記錄,不能從主表中刪除該行
——不能把有訂單的顧客刪除了刪除主表前,先刪子表
——先刪訂單表、后刪除顧客表主外鍵關(guān)系-3當(dāng)主表中沒(méi)有對(duì)應(yīng)的記錄時(shí),不能將記錄添加到子表創(chuàng)建檢查約束演示建立檢查約束……創(chuàng)建檢查約束演示建立檢查約束……使用T-SQL管理CHECK約束CREATETABLECustomers(CIDchar(6)NOTNULLConstraintPK_CIDPRIMARYKEY,CTrueNamevarchar(30)NOTNULL,Cpasswordvarchar(30)NOTNULL,CSexchar(2)NOTNULLCHECK(CSex='男'orCSex='女'),CAddressvarchar(50)NULL,CMobilevarchar(11)NOTNULL,CEmailvarchar(50)NULL,CRegisterDatedatetimeNOTNULL)使用T-SQL管理CHECK約束CREATETABLEUNIQUE約束為了保證商品類別名稱表Category中的名稱不重復(fù),在創(chuàng)建數(shù)據(jù)表Category時(shí),為CaName設(shè)置UNIQUE約束。完成語(yǔ)句如下所示。CREATETABLECategory(CaIDchar(2)NOTNULLPRIMARYKEY,CaNamevarchar(20)NOTNULL,CaDeletedbitNOTNULL,CONSTRAINTUN_CaNameUNIQUE(CaName))UNIQUE約束CREATETABLECategoryDEFAULT約束需要Customers表中輸入數(shù)據(jù)時(shí),為CRegisterDate提供一個(gè)默認(rèn)值為當(dāng)天時(shí)間,以保證非空性或簡(jiǎn)化用戶輸入,其完成語(yǔ)句如下所示。CREATETABLECustomers(CIDchar(6)NOTNULLConstraintPK_CIDPRIMARYKEY,CTrueNamevarchar(30)NOTNULL,Cpasswordvarchar(30)NOTNULL,CSexchar(2)NOTNULLCHECK(CSex='男'orCSex='女'),CAddressvarchar(50)NULL,CMobilevarchar(11)NOTNULL,CEmailvarchar(50)NULL,CRegisterDatedatetimeNOTNULLDEFAULT(GetDate()))DEFAULT約束CREATETABLECustom數(shù)據(jù)表的操作使用T_SQL語(yǔ)句修改表結(jié)構(gòu)ALTERTABLE<表名>[ALTERCOLUMN<列名><新數(shù)據(jù)類型>][ADD<新列名><數(shù)據(jù)類型><完整性約束>][DROP<完整性約束名稱>]數(shù)據(jù)表的操作使用T_SQL語(yǔ)句修改表結(jié)構(gòu)ALTERTA(1)使用ADD子句增加新列或新的完整性約束條件在Customers表中增加出生日期“CBirth”列,其數(shù)據(jù)類型為datetime類型。該操作使用T-SQL語(yǔ)句完成如下:在Orders表中增加外鍵約束,CID列為外鍵與Customers表的主鍵CID對(duì)應(yīng)。該操作使用T-SQL語(yǔ)句完成如下:ALTERTABLECustomersADDCBirthdatetimeALTERTABLEOrdersADDCONSTRAINTFK_Orders_CustomersFOREIGNKEY(CID)REFERENCESCustomers(CID)(1)使用ADD子句增加新列或新的完整性約束條件ALTER(2)使用DROP子句刪除指定的完整性約束條件。(3)使用ALTERCOLUMN子句修改基本表的列定義或約束將Customers表CTrueName列的數(shù)據(jù)類型改為char型,寬度為30,且該列允許為空值。該操作使用T-SQL語(yǔ)句完成如下:ALTERTABLECategoryDROPCONSTRAINTUN_CaNameALTERTABLECustomersALTERCOLUMNCTrueNamechar(30)NULL(2)使用DROP子句刪除指定的完整性約束條件。ALTER數(shù)據(jù)表的刪除考慮到不需要BookShop數(shù)據(jù)庫(kù)的購(gòu)物車表ShopCar,要將該表從BookShop數(shù)據(jù)庫(kù)中刪除,該操作使用T-SQL語(yǔ)句完成,完成語(yǔ)句如下所示。DROPTABLEShopCar數(shù)據(jù)表的刪除DROPTABLEShopCar管理網(wǎng)上書(shū)城系統(tǒng)數(shù)據(jù)表的數(shù)據(jù)
【例4-3-6】在SQLServer2005的SQLServerManagementStudio中完成Customers表中記錄的添加、刪除和修改等操作。INSERT[INTO]<表名>[<屬性列1>[,<屬性列2>…]]VALUES(<常量1>[,<常量2>]…)管理網(wǎng)上書(shū)城系統(tǒng)數(shù)據(jù)表的數(shù)據(jù)INSERT[INTO]<(1)插入所有列。新顧客信息錄入,顧客信息如表所示,添加到Customers表中。(2)插入指定列新顧客信息錄入,顧客信息地址CAddress和電子郵箱CEmail尚缺,只能將該顧客的部分信息如表所示添加到Customers表中。INSERTINTOCustomersVALUES('C0011','李平','123456', '女','廣東中山市','1351543876','liping@163.com','2009-9-6')INSERTINTOCustomers(CID,CTrueName,Cpassword,CSex,CMobile,CRegisterDate)VALUES('C0012','張先明','123456','男',,'2009-10-6')(1)插入所有列。INSERTINTOCustomers(3)插入多條記錄多名顧客信息錄入,顧客信息如表所示,添加到Customers表中。USEBookShopGOINSERTINTOCustomersVALUES('C0013','韓志國(guó)','123456','男',NULL,,'hanzg@163.com','2010-1-16')INSERTINTOCustomersVALUES('C0014','張小明','123456','男',NULL,,'zxm@163.com','2010-2-24')GO(3)插入多條記錄USEBookShop使用UPDATE語(yǔ)句修改記錄UPDATE<表名>SET<列名>=<表達(dá)式>[,<列名>=<表達(dá)式>][…n][FROM<表名>][WHERE<條件>];使用UPDATE語(yǔ)句修改記錄UPDATE<表名>(1)修改單條記錄這種情況適用于按照WHERE子句的條件選擇后只有一條記錄需要修改的情況。例如,修改商品信息表Goods中的數(shù)據(jù),將《游園驚夢(mèng)》這本書(shū)的庫(kù)存量“250”修改為“400”本。完成語(yǔ)句如下所示。UPDATEGoodsSETGCount=400WHEREGName='游園驚夢(mèng)'(1)修改單條記錄UPDATEGoods(2)修改多條記錄這種情況適用于按照WHERE子句的條件選擇后有多條記錄需要修改的情況。例如,修改商品信息表Goods中的數(shù)據(jù),將書(shū)本存量小于100本的圖書(shū)再增加50本。完成語(yǔ)句如下所示。UPDATEGoodsSETGCount=GCount+50WHEREGCount<=100(2)修改多條記錄UPDATEGoods使用DELETE語(yǔ)句刪除記錄DELETE[FROM<表名>][WHERE<條件>]使用DELETE語(yǔ)句刪除記錄DELETE(1)刪除指定記錄商品編號(hào)為“010001”的商品已售完,并且以后不考慮再進(jìn)貨,需要在商品信息表中清除該商品的信息。完成語(yǔ)句如下所示。DELETEFROMGoodsWHEREGID='010001'(1)刪除指定記錄DELETE(2)刪除所有記錄刪除商品信息表中的所有信息。完成語(yǔ)句如下所示。如果要?jiǎng)h除表中所有的行,則可以使用TRUNCATETABLE<表名>語(yǔ)句來(lái)完成。DELETEFROMGoodsTRUNCATETABLEGoods(2)刪除所有記錄DELETETRUNCATETAB創(chuàng)建數(shù)據(jù)庫(kù)完畢!輸入數(shù)據(jù)項(xiàng),驗(yàn)證主鍵、主外鍵關(guān)系、檢查約束……創(chuàng)建數(shù)據(jù)庫(kù)完畢!輸入數(shù)據(jù)項(xiàng),驗(yàn)證主鍵、主外鍵關(guān)系、檢查約束…總結(jié)1、保證數(shù)據(jù)完整性從()步驟開(kāi)始。
A、建立數(shù)據(jù)庫(kù)
B、建立數(shù)據(jù)庫(kù)表
C、在表中輸入數(shù)據(jù)
D、數(shù)據(jù)導(dǎo)出2、創(chuàng)建表的字段主要有哪些操作項(xiàng)?
輸入字段名 確定數(shù)據(jù)類型 確定是否允許為空 確定是否為主鍵或者標(biāo)識(shí)列 確定默認(rèn)值總結(jié)1、保證數(shù)據(jù)完整性從()步驟開(kāi)始??偨Y(jié)3、字段Age建立檢查約束,約束輸入的當(dāng)前的年齡在18-40歲之間,約束表達(dá)式如何寫(xiě)?總結(jié)3、字段Age建立檢查約束,約束輸入的當(dāng)前的年齡在18-態(tài)度決定一切細(xì)節(jié)影響成敗態(tài)度決定一切項(xiàng)目四網(wǎng)上書(shū)城數(shù)據(jù)庫(kù)表的管理項(xiàng)目四網(wǎng)上書(shū)城數(shù)據(jù)庫(kù)表的管理項(xiàng)目知識(shí)要點(diǎn)項(xiàng)目知識(shí)要點(diǎn)單詞學(xué)習(xí)1.Constraint:約束2.PrimaryKey:主鍵3.ForeignKey:外鍵4.Binary:二進(jìn)制5.Check:檢查6.Unique:唯一7.Alter:修改8.Insert:插入9.Update:更新10.Delete:刪除單詞學(xué)習(xí)1.Constraint:約束掌握數(shù)據(jù)表的基礎(chǔ)知識(shí)表的定義表是包含數(shù)據(jù)庫(kù)中所有數(shù)據(jù)的數(shù)據(jù)庫(kù)對(duì)象。在表中,數(shù)據(jù)成二維行列格式,每一行代表一個(gè)唯一的記錄,每一列代表一個(gè)域。表4-1顧客信息表掌握數(shù)據(jù)表的基礎(chǔ)知識(shí)表的定義表4-1顧客信息表掌握數(shù)據(jù)表的基礎(chǔ)知識(shí)列名列名是用來(lái)訪問(wèn)表中具體域的標(biāo)識(shí)符,列名必須遵循下列規(guī)則:(1)列名是可以含有從1到128的ASCII碼字符,它的組成包括字母、下劃線、符號(hào)以及數(shù)字。(2)不要給列名命名為與SQL關(guān)鍵字相同的名字,比如SELECT,IN,DESC等。(3)列名應(yīng)該反映數(shù)據(jù)的屬性。掌握數(shù)據(jù)表的基礎(chǔ)知識(shí)列名SQLServer的數(shù)據(jù)類型分類備注和說(shuō)明數(shù)據(jù)類型說(shuō)明二進(jìn)制數(shù)據(jù)類型存儲(chǔ)非子符和文本的數(shù)據(jù)Image可用來(lái)存儲(chǔ)圖像文本數(shù)據(jù)類型字符數(shù)據(jù)包括任意字母、符號(hào)或數(shù)字字符的組合Char固定長(zhǎng)度的非Unicode字符數(shù)據(jù)Varchar可變長(zhǎng)度非Unicode數(shù)據(jù)Nchar固定長(zhǎng)度的Unicode數(shù)據(jù)Nvarchar可變長(zhǎng)度Unicode數(shù)據(jù)Text存儲(chǔ)長(zhǎng)文本信息Ntext存儲(chǔ)可變長(zhǎng)度的長(zhǎng)文本日期和時(shí)間日期和時(shí)間在單引號(hào)內(nèi)輸入Datetime日期和時(shí)間數(shù)字?jǐn)?shù)據(jù)該數(shù)據(jù)僅包含數(shù)字,包括正數(shù)、負(fù)數(shù)以及分?jǐn)?shù)intsmallint整數(shù)floatreal數(shù)字貨幣數(shù)據(jù)類型用于十進(jìn)制貨幣值MoneyBit數(shù)據(jù)類型表示是/否的數(shù)據(jù)Bit存儲(chǔ)布爾數(shù)據(jù)類型SQLServer的數(shù)據(jù)類型分類備注和說(shuō)明數(shù)據(jù)類型說(shuō)明二進(jìn)思考電話號(hào)碼一般使用什么數(shù)據(jù)類型存儲(chǔ)?性別一般使用什么數(shù)據(jù)類型存儲(chǔ)?年齡信息一般使用什么數(shù)據(jù)類型存儲(chǔ)?照片信息一般使用什么數(shù)據(jù)類型存儲(chǔ)?薪水一般使用什么數(shù)據(jù)類型存儲(chǔ)?思考電話號(hào)碼一般使用什么數(shù)據(jù)類型存儲(chǔ)?網(wǎng)上書(shū)城數(shù)據(jù)表的設(shè)計(jì)與創(chuàng)建表的設(shè)計(jì)步驟(1)表的命名方式。(2)表中每一列的名稱、數(shù)據(jù)類型及其長(zhǎng)度。(3)表中的列是否允許空值,是否唯一,是否要進(jìn)行默認(rèn)設(shè)置或添加用戶定義約束。(4)表間的關(guān)系,即確定哪些列是主鍵,哪些是外鍵。網(wǎng)上書(shū)城數(shù)據(jù)表的設(shè)計(jì)與創(chuàng)建表的設(shè)計(jì)步驟項(xiàng)目中的部分表
顧客信息表(Customers)項(xiàng)目中的部分表顧客信息表(Customers)項(xiàng)目中的部分表訂單信息表(Orders)項(xiàng)目中的部分表訂單信息表(Orders)項(xiàng)目中的部分表訂單詳細(xì)表(OrderDetails)項(xiàng)目中的部分表訂單詳細(xì)表(OrderDetails)創(chuàng)建數(shù)據(jù)庫(kù)表使用SSMS向?qū)?chuàng)建表
【例4-2-1】在SQLServer2005中使用“SQLServerManagementStudio”創(chuàng)建BookShop數(shù)據(jù)庫(kù)中的Customers表(顧客信息表)。創(chuàng)建數(shù)據(jù)庫(kù)表使用SSMS向?qū)?chuàng)建表詳細(xì)步驟如下:(1)啟動(dòng)SSMS,登錄服務(wù)器類型為【數(shù)據(jù)庫(kù)引擎】,并使用Windows或SQLServer身份認(rèn)證建立連接。(2)在“對(duì)象資源管理器”中依次展開(kāi)【數(shù)據(jù)庫(kù)】節(jié)點(diǎn)、【BookShop】節(jié)點(diǎn),右鍵單擊【表】節(jié)點(diǎn),選擇【新建表】命令,如圖4-1所示。圖4-1選擇“新建表”詳細(xì)步驟如下:圖4-1選擇“新建表”
(3)打開(kāi)【表設(shè)計(jì)器】窗口,在【列名】下的編輯框中輸入列名“CID”,然后點(diǎn)擊【數(shù)據(jù)類型】下的下拉框,拖動(dòng)下拉框的滾動(dòng)條,選擇“char(10)”,如圖4-2所示。圖4-2表設(shè)計(jì)器(3)打開(kāi)【表設(shè)計(jì)器】窗口,在【列名】下的編輯框中
(4)在“表設(shè)計(jì)器”窗口的【列屬性】選項(xiàng)卡中的【長(zhǎng)度】域的編輯框中輸入6,如圖4-3所示。輸入完畢后,再看【數(shù)據(jù)類型】下的下拉框內(nèi)容由char(10)變?yōu)閏har(6)。(5)單擊“表設(shè)計(jì)器”窗口的【允許空】列中的小方框,使得小方框中√去掉,就符合了“CID”列不允許為空的要求。圖4-3修改字符類型長(zhǎng)度(4)在“表設(shè)計(jì)器”窗口的【列屬性】選項(xiàng)卡中(6)類似地,重復(fù)步驟(2)~(5),在“表設(shè)計(jì)器”窗口添加顧客信息表的其它7個(gè)字段,效果如圖4-4所示。圖4-4顧客信息表8個(gè)字段(6)類似地,重復(fù)步驟(2)~(5),在“表設(shè)計(jì)器”窗口添加
(7)設(shè)置主鍵。在“表設(shè)計(jì)器”窗口中選定第一個(gè)字段“CID”,再執(zhí)行菜單命令【表設(shè)計(jì)器】→【設(shè)置主鍵】即可按要求將字段“CID”設(shè)為主鍵,如圖4-5所示。圖4-5設(shè)置顧客信息表的主鍵(7)設(shè)置主鍵。在“表設(shè)計(jì)器”窗口中選定第一個(gè)(8)修改表名稱。在“表設(shè)計(jì)器”窗口右側(cè)“屬性”面板中【名稱】域的編輯框中輸入表名稱“Customers”,如圖4-6所示。表名稱輸入完后不是立即生效的,要在保存表后,表名稱修改才能生效。圖4-6修改表名稱(8)修改表名稱。在“表設(shè)計(jì)器”窗口右側(cè)“屬性”面板中【名稱
(9)保存表。單擊工具欄中的【保存】按鈕即可以保存表。新表創(chuàng)建后,在“對(duì)象資源管理器”中展開(kāi)【數(shù)據(jù)庫(kù)】節(jié)點(diǎn)中的數(shù)據(jù)庫(kù)節(jié)點(diǎn)【BookShop】,可以查看到剛才所建的表,如圖4-7所示。圖4-7創(chuàng)建好的Customers表(9)保存表。單擊工具欄中的【保存】按鈕即可以保
使用CREATETABLE語(yǔ)句創(chuàng)建表CREATETABLE<表名>(<列名><數(shù)據(jù)類型>[列級(jí)完整性約束條件][,<列名><數(shù)據(jù)類型>[列級(jí)完整性約束條件]...][,<表級(jí)完整性約束條件>])使用CREATETABLE語(yǔ)句創(chuàng)建表CREATETAB使用CREATETABLE語(yǔ)句創(chuàng)建表【例4-2-3】為了保存顧客基本信息,需要在BookShop數(shù)據(jù)庫(kù)中創(chuàng)建一個(gè)名為“Customers”的表,使用T-SQL語(yǔ)句完成創(chuàng)建表的過(guò)程。使用CREATETABLE語(yǔ)句創(chuàng)建表【例4使用CREATETABLE語(yǔ)句創(chuàng)建表詳細(xì)步驟如下:(1)成功登錄SQLServer服務(wù)器后,在SSMS界面中,單擊【新建查詢】按鈕,打開(kāi)一個(gè)SQLQuery窗口。(2)在SQLQuery窗口輸入如下命令,然后單擊按鈕,分析輸入的T-SQL語(yǔ)法是否有錯(cuò),然后再點(diǎn)擊【執(zhí)行】按鈕,即能創(chuàng)建好顧客信息表。如圖4-13所示。使用CREATETABLE語(yǔ)句創(chuàng)建表詳細(xì)步驟如下:使用CREATETABLE語(yǔ)句創(chuàng)建表UseBookShop--打開(kāi)數(shù)據(jù)庫(kù)Go--批處理結(jié)束語(yǔ)句CREATETABLECustomers(CIDchar(6)NOTNULLPRIMARYKEY,--PRIMARYKEY表示主鍵CTrueNamevarchar(30)NOTNULL,Cpasswordvarchar(30)NOTNULL,CSexchar(2)NOTNULL,CAddressvarchar(50)NULL,CMobilevarchar(11)NOTNULL,CEmailvarchar(50)NULL,CRegisterDatedatetimeNOTNULL)使用CREATETABLE語(yǔ)句創(chuàng)建表UseBookSh使用CREATETABLE語(yǔ)句創(chuàng)建表在SQLQuery窗口輸入T-SQL命令使用CREATETABLE語(yǔ)句創(chuàng)建表在SQLQuery窗口如果當(dāng)前數(shù)據(jù)庫(kù)中已存在Customers表,再次創(chuàng)建時(shí)系統(tǒng)將提示出錯(cuò)。如何解決呢?USEBookShop--將當(dāng)前數(shù)據(jù)庫(kù)設(shè)置為BookShop,以便在BookShop數(shù)據(jù)庫(kù)中建表GOIFEXISTS(SELECT*FROMsysobjectsWHEREname=’Customers’)
DROPTABLECustomersCREATETABLECustomers/*-創(chuàng)建顧客表-*/(…..)GO如果當(dāng)前數(shù)據(jù)庫(kù)中已存在Customers表,再次創(chuàng)建時(shí)系統(tǒng)將標(biāo)識(shí)列表中沒(méi)有合適的列作為主鍵怎么辦?標(biāo)識(shí)列表中沒(méi)有合適的列作為主鍵怎么辦?標(biāo)識(shí)列USEstuDB--將當(dāng)前數(shù)據(jù)庫(kù)設(shè)置為stuDBGOCREATETABLEstuInfo
/*-創(chuàng)建學(xué)員信息表-*/(
stuNameVARCHAR(20)NOTNULL,--姓名,非空(必填)stuNoCHAR(6)NOTNULL,--學(xué)號(hào),非空(必填)stuAgeINTNOTNULL,--年齡,INT類型默認(rèn)為4個(gè)字節(jié)stuSeatSMALLINTIDENTITY(1,1),--座位號(hào),自動(dòng)編號(hào)
stuAddressTEXT--住址,允許為空,即可選輸入)GOIDENTITY(起始值,遞增量)標(biāo)識(shí)列USEstuDB--將當(dāng)前數(shù)據(jù)庫(kù)設(shè)置為stuD思考標(biāo)識(shí)列允許為字符數(shù)據(jù)類型嗎?如果標(biāo)識(shí)列A的初始值為1,增長(zhǎng)量為2,則輸入三行數(shù)據(jù)以后,再刪除兩行,下次再輸入數(shù)據(jù)行的時(shí)候,標(biāo)識(shí)值從多少開(kāi)始?思考標(biāo)識(shí)列允許為字符數(shù)據(jù)類型嗎?數(shù)據(jù)完整性數(shù)據(jù)完整性是指數(shù)據(jù)庫(kù)中數(shù)據(jù)的準(zhǔn)確性和一致性。如果兩個(gè)或更多的表由于其存儲(chǔ)的信息而相互關(guān)聯(lián),那么只要修改了其中一個(gè)表,與之相關(guān)的所有表都要做出相應(yīng)的修改,如果不這么做,存儲(chǔ)的數(shù)據(jù)就會(huì)不再準(zhǔn)確。也就是說(shuō),推動(dòng)了數(shù)據(jù)的完整性。數(shù)據(jù)完整性主要分為四類:實(shí)體完整性、域完整性、引用完整性和用戶定義完整性。數(shù)據(jù)完整性數(shù)據(jù)完整性是指數(shù)據(jù)庫(kù)中數(shù)據(jù)的準(zhǔn)確性和一致性。如果兩數(shù)據(jù)完整性數(shù)據(jù)存放在表中“數(shù)據(jù)完整性的問(wèn)題大多是由于設(shè)計(jì)引起的”創(chuàng)建表的時(shí)候,就應(yīng)當(dāng)保證以后數(shù)據(jù)輸入是正確的
——錯(cuò)誤的數(shù)據(jù)、不符合要求的數(shù)據(jù)不允許輸入創(chuàng)建表:保證數(shù)據(jù)的完整性=實(shí)施完整性約束數(shù)據(jù)完整性數(shù)據(jù)存放在表中創(chuàng)建表:保證數(shù)據(jù)的完整性=實(shí)施完完整性包括…2-1輸入的類型是否正確?——年齡必須是數(shù)字輸入的格式是否正確?——身份證號(hào)碼必須是18位是否在允許的范圍內(nèi)?——性別只能是”男”或者”女”是否存在重復(fù)輸入?——學(xué)員信息輸入了兩次是否符合其他特定要求?——信譽(yù)值大于5的用戶才能夠加入會(huì)員列表……列值要求(約束)整行要求(約束)完整性包括…2-1輸入的類型是否正確?列值要求(約束)整行要完整性包括…2-2域完整性實(shí)體完整性引用完整性自定義完整性完整性包括…2-2域完整性實(shí)體完整性引用完整性自定義完整性實(shí)體完整性河南新鄉(xiāng)趙可以0010016河南新鄉(xiāng)張麗鵑0010015江西南昌雷銅0010014湖南新田吳蘭0010013山東定陶李山0010012….地址姓名學(xué)號(hào)江西南昌雷銅0010014×約束方法:唯一約束、主鍵約束、標(biāo)識(shí)列實(shí)體完整性河南新鄉(xiāng)趙可以0010016河南新鄉(xiāng)張麗鵑0010域完整性河南新鄉(xiāng)趙可以0010016河南新鄉(xiāng)張麗鵑0010015江西南昌雷銅0010014湖南新田吳蘭0010013山東定陶李山0010012….地址姓名學(xué)號(hào)湖北江門(mén)李亮8700000000×約束方法:限制數(shù)據(jù)類型、檢查約束、外鍵約束、默認(rèn)值、非空約束域完整性河南新鄉(xiāng)趙可以0010016河南新鄉(xiāng)張麗鵑00100引用完整性河南新鄉(xiāng)趙可以0010016河南新鄉(xiāng)張麗鵑0010015江西南昌雷銅0010014湖南新田吳蘭0010013山東定陶李山0010012…地址姓名學(xué)號(hào)980010021數(shù)學(xué)×約束方法:外鍵約束科目學(xué)號(hào)分?jǐn)?shù)…數(shù)學(xué)001001288數(shù)學(xué)001001374語(yǔ)文001001267語(yǔ)文001001381數(shù)學(xué)001001698引用完整性河南新鄉(xiāng)趙可以0010016河南新鄉(xiāng)張麗鵑0010自定義完整性AV121322喬峰CV0016AV372133玄痛CV0015AV378291沙悟凈AV0014AV378290豬悟能AV0013AV378289孫悟空AV0012….會(huì)員證用戶姓名用戶編號(hào)約束方法:規(guī)則、存儲(chǔ)過(guò)程、觸發(fā)器帳號(hào)姓名信用….00192孫悟空700288豬悟能612333段譽(yù)890111虛竹4093000岳不群-10×觸發(fā)器:檢查信用值自定義完整性AV121322喬峰CV0016AV372133思考學(xué)員姓名允許為空嗎?家庭地址允許為空嗎?電子郵件信息允許為空嗎?考試成績(jī)?cè)试S為空嗎?思考學(xué)員姓名允許為空嗎?思考在主鍵列輸入的數(shù)值,允許為空嗎?一個(gè)表可以有多個(gè)主鍵嗎?在一個(gè)學(xué)校數(shù)據(jù)庫(kù)中,如果一個(gè)學(xué)校內(nèi)允許重名的學(xué)員,但是一個(gè)班級(jí)內(nèi)不允許學(xué)員重名,可以組合班級(jí)和姓名兩個(gè)字段一起來(lái)作為主鍵嗎?思考在主鍵列輸入的數(shù)值,允許為空嗎?選擇主鍵的原則最少性盡量選擇單個(gè)鍵作為主鍵穩(wěn)定性盡量選擇數(shù)值更新少的列作為主鍵選擇主鍵的原則最少性SQLServer的約束約束的目的:確保表中數(shù)據(jù)的完整型常用的約束類型:主鍵約束(PrimaryKeyConstraint):要求主鍵列數(shù)據(jù)唯一,并且不允許為空唯一約束(UniqueConstraint):要求該列唯一,允許為空,但只能出現(xiàn)一個(gè)空值。檢查約束(CheckConstraint):某列取值范圍限制、格式限制等,如有關(guān)年齡的約束默認(rèn)約束(DefaultConstraint):某列的默認(rèn)值,如我們的男性學(xué)員較多,性別默認(rèn)為“男”外鍵約束(ForeignKeyConstraint):用于兩表間建立關(guān)系,需要指定引用主表的那列SQLServer的約束約束的目的:確保表中數(shù)據(jù)的完整型約束名的取名規(guī)則推薦采用:約束類型_約束字段主鍵(PrimaryKey)約束:如PK_stuNo唯一(UniqueKey)約束:如
UQ_stuID默認(rèn)(DefaultKey)約束:如DF_stuAddress檢查(CheckKey)約束:如
CK_stuAge外鍵(ForeignKey)約束:如FK_stuNo
約束名的取名規(guī)則推薦采用:約束類型_約束字段PRIMARYKEY約束PRIMARYKEY約束表的一列或幾列的組合的值在表中唯一地指定一行記錄,這樣的一列或多列稱為表的主鍵(PRIMARYKEY),通過(guò)它可強(qiáng)制表的實(shí)體完整性。
【例4-3-1】使用PRIMARYKEY約束對(duì)數(shù)據(jù)庫(kù)BookShop實(shí)施數(shù)據(jù)完整性。PRIMARYKEY約束PRIMARYKEY約束1.使用SQLServerManagementStudio管理PRIMARYKEY約束(1)啟動(dòng)SSMS,進(jìn)入新建表,如果表已經(jīng)建立好,則進(jìn)入修改表的狀態(tài),如圖4-11所示。(2)單擊要設(shè)置的PRIMARYKEY約束的列,例如:CID,選擇工具欄上的按鈕(也可以右鍵選擇【設(shè)置主鍵】選項(xiàng)),創(chuàng)建主鍵約束。如圖4-12所示。(3)創(chuàng)建主鍵結(jié)束后,在對(duì)應(yīng)的列名前有標(biāo)志,此時(shí),該列的【允許空】也改變?yōu)椤胺强铡?,如圖4-13所示。1.使用SQLServerManagementStud圖4-11選擇修改表圖4-11選擇修改表圖4-12選擇設(shè)置主鍵圖4-12選擇設(shè)置主鍵圖4-13創(chuàng)建PRIMARYKEY約束圖4-13創(chuàng)建PRIMARYKEY約束使用T-SQL管理PRIMARYKEY約束CREATETABLECustomers(CIDchar(6)NOTNULLConstraintPK_CIDPRIMARYKEY,CTrueNamevarchar(30)NOTNULL,Cpasswordvarchar(30)NOTNULL,CSexchar(2)NOTNULL,CAddressvarchar(50)NULL,CMobilevarchar(11)NOTNULL,CEmailvarchar(50)NULL,CRegisterDatedatetimeNOTNULL)使用T-SQL管理PRIMARYKEY約束CREATET如果在訂單詳情表中不設(shè)置編號(hào),則可以將表中“訂單編號(hào)+商品編號(hào)”作為訂單詳情的唯一標(biāo)識(shí),在創(chuàng)建數(shù)據(jù)表OrderDetails時(shí),為OID和GID的組合設(shè)置PRIMARYKEY約束。完成語(yǔ)句如下所示。USEBookShopGOCREATETABLEOrderDetails(OIDchar(14)NOTNULL,GIDchar(6)NOTNULL,OdPricefloatNOTNULL,OdNumberintNOTNULL,CONSTRAINTPK_OID_GIDPRIMARYKEY(OID,GID))如果在訂單詳情表中不設(shè)置編號(hào),則可以將表中“訂單編號(hào)+商品編圖4-14組合主鍵
圖4-14組合主鍵FOREIGNKEY約束
FOREIGNKEY約束標(biāo)識(shí)表之間的關(guān)系,用于強(qiáng)制參照完整性,為表中一列或者多列數(shù)據(jù)提供參照完整性。FOREIGNKEY約束也可以參照自身表中的其他列,這種參照稱為自參照。FOREIGNKEY約束主外鍵關(guān)系-1演示建立數(shù)據(jù)庫(kù)關(guān)系圖……主外鍵關(guān)系-1演示建立數(shù)據(jù)庫(kù)關(guān)系圖……主外鍵關(guān)系-2演示建立主-外鍵關(guān)系……主外鍵關(guān)系-2演示建立主-外鍵關(guān)系……主外鍵關(guān)系-3當(dāng)主表中沒(méi)有對(duì)應(yīng)的記錄時(shí),不能將記錄添加到子表
——訂單表中不能出現(xiàn)在顧客表中不存在的客戶;不能更改主表中的值而導(dǎo)致子表中的記錄孤立
——把顧客表中的客戶編號(hào)改變了,訂單表中的顧客編號(hào)也應(yīng)當(dāng)隨之改變;子表存在與主表對(duì)應(yīng)的記錄,不能從主表中刪除該行
——不能把有訂單的顧客刪除了刪除主表前,先刪子表
——先刪訂單表、后刪除顧客表主外鍵關(guān)系-3當(dāng)主表中沒(méi)有對(duì)應(yīng)的記錄時(shí),不能將記錄添加到子表創(chuàng)建檢查約束演示建立檢查約束……創(chuàng)建檢查約束演示建立檢查約束……使用T-SQL管理CHECK約束CREATETABLECustomers(CIDchar(6)NOTNULLConstraintPK_CIDPRIMARYKEY,CTrueNamevarchar(30)NOTNULL,Cpasswordvarchar(30)NOTNULL,CSexchar(2)NOTNULLCHECK(CSex='男'orCSex='女'),CAddressvarchar(50)NULL,CMobilevarchar(11)NOTNULL,CEmailvarchar(50)NULL,CRegisterDatedatetimeNOTNULL)使用T-SQL管理CHECK約束CREATETABLEUNIQUE約束為了保證商品類別名稱表Category中的名稱不重復(fù),在創(chuàng)建數(shù)據(jù)表Category時(shí),為CaName設(shè)置UNIQUE約束。完成語(yǔ)句如下所示。CREATETABLECategory(CaIDchar(2)NOTNULLPRIMARYKEY,CaNamevarchar(20)NOTNULL,CaDeletedbitNOTNULL,CONSTRAINTUN_CaNameUNIQUE(CaName))UNIQUE約束CREATETABLECategoryDEFAULT約束需要Customers表中輸入數(shù)據(jù)時(shí),為CRegisterDate提供一個(gè)默認(rèn)值為當(dāng)天時(shí)間,以保證非空性或簡(jiǎn)化用戶輸入,其完成語(yǔ)句如下所示。CREATETABLECustomers(CIDchar(6)NOTNULLConstraintPK_CIDPRIMARYKEY,CTrueNamevarchar(30)NOTNULL,Cpasswordvarchar(30)NOTNULL,CSexchar(2)NOTNULLCHECK(CSex='男'orCSex='女'),CAddressvarchar(50)NULL,CMobilevarchar(11)NOTNULL,CEmailvarchar(50)NULL,CRegisterDatedatetimeNOTNULLDEFAULT(GetDate()))DEFAULT約束CREATETABLECustom數(shù)據(jù)表的操作使用T_SQL語(yǔ)句修改表結(jié)構(gòu)ALTERTABLE<表名>[ALTERCOLUMN<列名><新數(shù)據(jù)類型>][ADD<新列名><數(shù)據(jù)類型><完整性約束>][DROP<完整性約束名稱>]數(shù)據(jù)表的操作使用T_SQL語(yǔ)句修改表結(jié)構(gòu)ALTERTA(1)使用ADD子句增加新列或新的完整性約束條件在Customers表中增加出生日期“CBirth”列,其數(shù)據(jù)類型為datetime類型。該操作使用T-SQL語(yǔ)句完成如下:在Orders表中增加外鍵約束,CID列為外鍵與Customers表的主鍵CID對(duì)應(yīng)。該操作使用T-SQL語(yǔ)句完成如下:ALTERTABLECustomersADDCBirthdatetimeALTERTABLEOrdersADDCONSTRAINTFK_Orders_CustomersFOREIGNKEY(CID)REFERENCESCustomers(CID)(1)使用ADD子句增加新列或新的完整性約束條件ALTER(2)使用DROP子句刪除指定的完
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2026年鄭州城市職業(yè)學(xué)院高職單招職業(yè)適應(yīng)性測(cè)試備考試題帶答案解析
- 2026年扎蘭屯職業(yè)學(xué)院?jiǎn)握新殬I(yè)技能筆試備考試題帶答案解析
- 2026年山西水利職業(yè)技術(shù)學(xué)院高職單招職業(yè)適應(yīng)性測(cè)試模擬試題帶答案解析
- 2026年漳州城市職業(yè)學(xué)院?jiǎn)握新殬I(yè)技能筆試參考題庫(kù)帶答案解析
- 2026年風(fēng)味增強(qiáng)器項(xiàng)目評(píng)估報(bào)告
- 2026年智能腰椎按摩靠墊項(xiàng)目評(píng)估報(bào)告
- 2026年廣州番禺職業(yè)技術(shù)學(xué)院?jiǎn)握芯C合素質(zhì)筆試模擬試題附答案詳解
- 2026年智能座艙生成式AI項(xiàng)目可行性研究報(bào)告
- 2026年伊犁職業(yè)技術(shù)學(xué)院高職單招職業(yè)適應(yīng)性考試備考試題帶答案解析
- 2026年重慶工貿(mào)職業(yè)技術(shù)學(xué)院?jiǎn)握新殬I(yè)技能考試模擬試題帶答案解析
- 食品加工企業(yè)主要管理人員及工程技術(shù)人員的配備計(jì)劃
- 兒童語(yǔ)言發(fā)育遲緩課件
- 2025至2030年中國(guó)汽車用碳纖維行業(yè)競(jìng)爭(zhēng)格局分析及市場(chǎng)需求前景報(bào)告
- 正循環(huán)成孔鉆孔灌注樁施工方案
- 焊接作業(yè)指導(dǎo)書(shū)完整版
- 蒼南分孫協(xié)議書(shū)
- 2025年部編版道德與法治六年級(jí)上冊(cè)全冊(cè)教案設(shè)計(jì)(共4個(gè)單元含有教學(xué)計(jì)劃)
- 2025-2030中國(guó)電動(dòng)警用摩托車和應(yīng)急摩托車行業(yè)市場(chǎng)現(xiàn)狀供需分析及投資評(píng)估規(guī)劃分析研究報(bào)告
- 企業(yè)所得稅納稅申報(bào)表(2024年修訂)填報(bào)要點(diǎn)及相關(guān)政策分析
- 課程設(shè)計(jì)說(shuō)明書(shū)
- 2025年中國(guó)納秒紫外激光器行業(yè)市場(chǎng)運(yùn)行現(xiàn)狀及投資規(guī)劃建議報(bào)告
評(píng)論
0/150
提交評(píng)論