版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
數(shù)據(jù)庫SQLServer/SQlite教程授課教師:第4章關(guān)系數(shù)據(jù)庫語言SQL(上)關(guān)系數(shù)據(jù)庫的標(biāo)準(zhǔn)語言SQL(StructuredQueryLanguage,結(jié)構(gòu)化查詢語言)是一種數(shù)據(jù)庫查詢和程序設(shè)計(jì)語言,包括數(shù)據(jù)定義語言、數(shù)據(jù)操縱語言和數(shù)據(jù)控制語言。由于該語言簡潔、功能豐富,因此備受用戶及計(jì)算機(jī)工業(yè)界的歡迎,成為應(yīng)用最廣泛的關(guān)系數(shù)據(jù)庫語言。目前,SQL已被確定為關(guān)系數(shù)據(jù)庫系統(tǒng)的國際標(biāo)準(zhǔn)語言,1989年提出了SQL89標(biāo)準(zhǔn),1992年公布了SQL92標(biāo)準(zhǔn),并于1999年再次更新為SQL99標(biāo)準(zhǔn)。第4章
關(guān)系數(shù)據(jù)庫語言SQL(上)4.1SQL概述目錄4.2SQL的數(shù)據(jù)類型4.3數(shù)據(jù)庫定義4.4數(shù)據(jù)表定義4.1SQL概述結(jié)構(gòu)化查詢語言(StructuredQueryLanguage,SQL)是1974年由Boyce和Chamberlin提出的。1975—1979年,最早是IBM的圣約瑟研究實(shí)驗(yàn)室為其關(guān)系數(shù)據(jù)庫管理系統(tǒng)
SYSTEMR開發(fā)的一種查詢語言,它的前身是SQUARE語言。經(jīng)過各公司的不斷修改、擴(kuò)充和完善,1986年美國頒布了SQL的美國標(biāo)準(zhǔn),1987年國際標(biāo)準(zhǔn)化組織將SQL采納為國際標(biāo)準(zhǔn),SQL最終成為關(guān)系數(shù)據(jù)庫的標(biāo)準(zhǔn)語言。由于SQL使用方便、功能豐富、語言簡潔易學(xué),很快得到推廣和應(yīng)用。4.1
SQL概述SQL結(jié)構(gòu)簡潔,功能強(qiáng)大,簡單易學(xué),自從IBM公司1981年推出以來,SQL得到了廣泛的應(yīng)用。SQLServer、Oracle、Sybase、Informix等大型的數(shù)據(jù)庫管理系統(tǒng),VisualFoxpro、PowerBuilder等微機(jī)上常用的數(shù)據(jù)庫開發(fā)系統(tǒng),都支持SQL作為查詢語言。SQL集數(shù)據(jù)定義(DataDefinition)、數(shù)據(jù)操縱(DataManipulation)和數(shù)據(jù)控制(DataControl)等功能于一體,充分體現(xiàn)了關(guān)系數(shù)據(jù)庫語言的特點(diǎn)和優(yōu)點(diǎn)。4.1
SQL概述SQL主要由以下幾部分組成:(1)數(shù)據(jù)定義語言(DataDefinitionLanguage,DDL)。數(shù)據(jù)定義語言用于建立、修改、刪除數(shù)據(jù)庫中的各種對象:表、視圖、索引等(如Create、Alter、Drop)。(2)數(shù)據(jù)操縱語言(DataManipulationLanguage,DML)。數(shù)據(jù)操縱語言用庫數(shù)據(jù),主要有三條語句:Insert、Update、Delete。(3)數(shù)據(jù)查詢語言(DataQueryLanguage,DQL)。數(shù)據(jù)查詢語言用于檢索數(shù)據(jù)庫記錄,基本結(jié)構(gòu)是由Select子句、From子句、Where子句組成的查詢塊:Select<字段名表>From<表或視圖名>Where<查詢條件>。(4)數(shù)據(jù)控制語言(DataControlLanguage,DCL)。數(shù)據(jù)控制語言用來授予或回收訪問數(shù)據(jù)庫的某種特權(quán),并控制數(shù)據(jù)庫操縱事務(wù)發(fā)生的時間和效果,對數(shù)據(jù)庫實(shí)行監(jiān)視等,包括三條命令:Grant、Revoke和Deny。4.1
SQL概述4.2SQL的數(shù)據(jù)類型在計(jì)算機(jī)中數(shù)據(jù)有兩種特征:類型和長度,所謂數(shù)據(jù)類型就是以數(shù)據(jù)的表現(xiàn)方式和存儲方式來劃分?jǐn)?shù)據(jù)的種類。在SQLServer中,每個列、局部變量、表達(dá)式和參數(shù)都具有一個相關(guān)的數(shù)據(jù)類型。數(shù)據(jù)類型是一種屬性,用來設(shè)定某一個具體列保存數(shù)據(jù)的類型。數(shù)據(jù)類型可分為整數(shù)型、精確浮點(diǎn)型、近似浮點(diǎn)型、日期時間型等10種類型,下面依次介紹。4.2
SQL的數(shù)據(jù)類型整數(shù)型的數(shù)據(jù)范圍及所占字節(jié)如表4-1所示。4.2
SQL的數(shù)據(jù)類型1.整數(shù)型類型數(shù)據(jù)范圍所占字節(jié)說明bigint8字節(jié)20位長int4字節(jié)10位長smallint2字節(jié)5位長tinyint0~2551字節(jié)存儲0~255的整數(shù)bit0、1、空值用1bit,占1字節(jié)用于存儲只有兩種可能值的數(shù)據(jù),如Yes或No、True或False、On或Off表4-1整數(shù)型精確浮點(diǎn)型的數(shù)據(jù)范圍及所占字節(jié)如表4-2所示。4.2
SQL的數(shù)據(jù)類型2.精確浮點(diǎn)型類型數(shù)據(jù)范圍所占字節(jié)說明numeric[(p[,S])]1~9位5字節(jié)10~19位9字節(jié)20~28位13字節(jié)29~38位17字節(jié)總位數(shù)p,精度s是小數(shù)點(diǎn)右邊存儲的數(shù)字位數(shù)decimal[(p[,S])]同上同上表4-2精確浮點(diǎn)型近似浮點(diǎn)型的數(shù)據(jù)范圍及所占字節(jié)如表4-3所示。4.2
SQL的數(shù)據(jù)類型3.近似浮點(diǎn)型類型數(shù)據(jù)范圍所占字節(jié)說明float[(n)]n為1~24,7位數(shù),4字節(jié);n為25~53,15位數(shù),8字節(jié)在其范圍內(nèi)不是所有的數(shù)都能精確表示real4字節(jié)同上表4-3近似浮點(diǎn)型日期時間型的格式、數(shù)據(jù)范圍及所占字節(jié)如表4-4所示。4.2
SQL的數(shù)據(jù)類型4.日期時間型類型數(shù)據(jù)范圍所占字節(jié)說明精確度timehh:mm:ss[.nnnnnnn]00:00:00:000000023:59:59.99999993~5100nsdateYYYY-MM-DD0001-01-01~9999-12-3131天smalldatetimeYYYY-MM-DDhh:mm:ss1900-01-01~2079-06-0641mindatetimeYYYY-MM-DDhh:mm:ss[.nnn]1753-01-01~9999-12-3180.00333sdatetime2YYYY-MM-DDhh:mm:ss[.nnnnnnn]0001-01-0100:00:00:0000000~9999-12-3123:59:59.99999996~8100nsdatetimeoffsetYYYY-MM-DDhh:mm:ss[.nnnnnnn][+│-]hh:mm0001-01-0100:00:00:0000000~9999-12-3123:59:59.99999998~10100ns表4-4日期時間型字符型的數(shù)據(jù)范圍及所占字節(jié)如表4-5所示。4.2
SQL的數(shù)據(jù)類型5.字符型類型數(shù)據(jù)范圍所占字節(jié)說明char1-8000字符1個字符1個字節(jié),為固定長度存儲變長字符數(shù)據(jù)varchar1-8000字符1個字符1個字節(jié),存多占少存儲變長字符數(shù)據(jù)text1個字符1個字節(jié),最大2GB表4-5整數(shù)型Unicode字符型的數(shù)據(jù)范圍及所占字節(jié)如表4-6所示。4.2
SQL的數(shù)據(jù)類型6.Unicode字符型類型數(shù)據(jù)范圍所占字節(jié)說明nchar1-4000字符1個字符2個字節(jié),為固定長度用雙字節(jié)結(jié)構(gòu)存儲變長統(tǒng)一編碼字符型數(shù)據(jù)nvarchar1-4000字符1個字符2個字節(jié),存多占少用雙字節(jié)結(jié)構(gòu)存儲變長統(tǒng)一編碼字符型數(shù)據(jù)ntext1個字符2個字節(jié),最大2GB表4-6
Unicode字符型二進(jìn)制字符型的數(shù)據(jù)范圍及所占字節(jié)如表4-7所示。4.2
SQL的數(shù)據(jù)類型7.二進(jìn)制字符型類型數(shù)據(jù)范圍所占字節(jié)說明binary1-8000字符存儲時需另加5字節(jié),固定存儲定長二進(jìn)制數(shù)據(jù)varbinary1-8000字符存儲時需另加5字節(jié),變長存儲定長二進(jìn)制數(shù)據(jù)image同varbinary,最大2GB表4-7二進(jìn)制字符型貨幣型的數(shù)據(jù)范圍及所占字節(jié)如表4-8所示。4.2
SQL的數(shù)據(jù)類型8.貨幣型類型數(shù)據(jù)范圍所占字節(jié)說明money8字節(jié)用來表示錢和貨幣值,能存儲-9220億~9220億的數(shù)據(jù),精確到萬分之一smallmoney4字節(jié)用來表示錢和貨幣值,能存儲-214748.3648~214748.3647的數(shù)據(jù),精確到萬分之一表4-8貨幣型特殊數(shù)據(jù)類型如表4-9所示。4.2
SQL的數(shù)據(jù)類型9.特殊數(shù)據(jù)類型類型說明cursorcursor類型包含一個對游標(biāo)的引用,用在存儲過程中,而且創(chuàng)建表時不能用uniqueidentifier用來存儲一個全局唯一標(biāo)識符,即guid,可以使用newid()函數(shù)或轉(zhuǎn)換一個字符串為唯一標(biāo)識符來初始化具有唯一標(biāo)識符的列timerstamp用來創(chuàng)建一個數(shù)據(jù)庫范圍內(nèi)的唯一值,一個表只能有一個表4-9特殊數(shù)據(jù)類型下面主要介紹uniqueidentifier及newid()的使用。uniqueidentifier數(shù)據(jù)類型用于存儲guid的值,占用16byte。SQLServer把uniqueidentifier存儲為16個固定字節(jié)的二進(jìn)制數(shù)值,即binary(16),按照特定的格式顯示:xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx。其中,x是一個十六進(jìn)制數(shù)字,數(shù)值范圍是0~9,A~F。由于每個字節(jié)存儲2個十六進(jìn)制數(shù)據(jù),因此,按照存儲字節(jié),uniqueidentifier的格式簡寫為:4B-2B-2B-2B-6B。4.2
SQL的數(shù)據(jù)類型9.特殊數(shù)據(jù)類型在SQLServer中,系統(tǒng)不會自動為uniqueidentifier列賦值,必須顯式賦值。使用guid產(chǎn)生函數(shù)newid()進(jìn)行賦值,產(chǎn)生隨機(jī)的guid。使用guid的好處是:在不同的Server上,SQLServer保證guid的值總是唯一的。uniqueidentifier值能夠比較大小,能夠使用isnull或isnotnull操作符判斷是否為“null”;但是不能保證后面的數(shù)比前面的大,因此不宜用于索引。4.2
SQL的數(shù)據(jù)類型9.特殊數(shù)據(jù)類型例如,對uniqueidentifier類型的變量賦值,語法格式如下:declare@uiuniqueidentifierset@ui=newid()select@ui或直接執(zhí)行selectnewid()、printnewid(),可生成不同的值。4.2
SQL的數(shù)據(jù)類型9.特殊數(shù)據(jù)類型例如,創(chuàng)建uniqueidentifier類型的字段,由于uniqueidentifier列不是由系統(tǒng)自動賦值的,必須顯式賦值,可以為uniqueidentifier列創(chuàng)建default約束,并使用guid生成函數(shù)賦值。在default約束中使用newid(),為每行數(shù)據(jù)生成隨機(jī)的唯一值。其語法格式如下:createtabledbo.mytable_rand(columnAuniqueidentifierdefaultnewid(),columnBint,columnCvarchar(10))4.2
SQL的數(shù)據(jù)類型9.特殊數(shù)據(jù)類型用戶自定義數(shù)據(jù)類型的語法格式如下:createtype[schemaname.]typename{frombasetype[(precision[,scale])][null|notnull]}說明:schemaname指定類型所屬架構(gòu);basetype指定類型基于哪一個基本數(shù)據(jù)類型,4.2
SQL的數(shù)據(jù)類型10.用戶自定義數(shù)據(jù)類型說明:schemaname指定類型所屬架構(gòu);basetype指定類型基于哪一個基本數(shù)據(jù)類型,如果基于decimal或numeric,則precision指定總位數(shù),scale指定小數(shù)點(diǎn)后的位數(shù)。例如,創(chuàng)建一個數(shù)據(jù)類型,存放圖書價格,語法格式如下:createtypepricedecimalfromdecimal(6,2)notnull在該數(shù)據(jù)庫下創(chuàng)建“圖書”表時,就有了自定義的數(shù)據(jù)類型“pricedecimal”,其總位數(shù)為6,小數(shù)位2位。4.2
SQL的數(shù)據(jù)類型10.用戶自定義數(shù)據(jù)類型4.3數(shù)據(jù)庫定義SQLServer2008R2用文件來存放數(shù)據(jù)庫。數(shù)據(jù)庫是由數(shù)據(jù)庫文件和事務(wù)日志文件組成的,一個數(shù)據(jù)庫至少應(yīng)包含一個數(shù)據(jù)庫文件和一個事務(wù)日志文件。數(shù)據(jù)庫文件包含數(shù)據(jù)和對象,例如表、索引、視圖和存儲過程。事務(wù)日志文件包含恢復(fù)數(shù)據(jù)庫中的所有事務(wù)所需的信息。為便于分配和管理,可以將數(shù)據(jù)文件集合起來,放在文件組中。4.3
數(shù)據(jù)庫定義數(shù)據(jù)庫文件是存放數(shù)據(jù)庫數(shù)據(jù)和數(shù)據(jù)庫對象的文件。一個數(shù)據(jù)庫可以有一個或多個數(shù)據(jù)庫文件,一個數(shù)據(jù)庫文件只屬于一個數(shù)據(jù)庫。當(dāng)有多個數(shù)據(jù)庫文件時,有一個文件被定義為主數(shù)據(jù)庫文件,擴(kuò)展名為mdf,用來存儲數(shù)據(jù)庫的啟動信息和部分或全部數(shù)據(jù)。一個數(shù)據(jù)庫只能有一個主數(shù)據(jù)庫文件,其他數(shù)據(jù)庫文件被稱為次數(shù)據(jù)庫文件,擴(kuò)展名為ndf,用來存儲主文件沒存儲的其他數(shù)據(jù)。事務(wù)日志文件是記錄所有事務(wù)以及每個事務(wù)對數(shù)據(jù)庫所作修改的文件,擴(kuò)展名為ldf。一個數(shù)據(jù)庫可以有一個或多個事務(wù)日志文件。4.3
數(shù)據(jù)庫定義文件組是將多個數(shù)據(jù)庫文件集合起來形成的一個整體。每個文件組有一個組名。與數(shù)據(jù)庫文件一樣,文件組也分為主文件組和次文件組。一個文件只能存在于一個文件組中,一個文件組也只能被一個數(shù)據(jù)庫使用。每個數(shù)據(jù)庫有一個主文件組,如果在數(shù)據(jù)庫中創(chuàng)建對象時沒有指定對象所屬的文件組,對象將被分配給默認(rèn)文件組Primary,此文件組包含主數(shù)據(jù)文件和未放入其他文件組的所有次數(shù)據(jù)文件。4.3
數(shù)據(jù)庫定義創(chuàng)建數(shù)據(jù)庫的最簡語法代碼如下:createdatabasedatabase_name在這種情況下,數(shù)據(jù)庫的參數(shù)設(shè)置都使用系統(tǒng)默認(rèn)值。4.3.1
創(chuàng)建數(shù)據(jù)庫1.命令方式創(chuàng)建數(shù)據(jù)庫1)創(chuàng)建數(shù)據(jù)庫的最簡語法例4-1
使用SQL語句創(chuàng)建學(xué)生成績數(shù)據(jù)庫studscore_db1,所有參數(shù)均取默認(rèn)值。操作步驟如下:(1)在SQLServerManagementStudio中,單擊“新建查詢”,新建SQLQuery1.sql文件。接下來,打開SQLQuery1.sql文件,如圖4-2所示。4.3.1
創(chuàng)建數(shù)據(jù)庫1.命令方式創(chuàng)建數(shù)據(jù)庫1)創(chuàng)建數(shù)據(jù)庫的最簡語法圖4-2“新建數(shù)據(jù)庫”快捷菜單(2)在工作界面,在英文狀態(tài)下輸入“createdatabasestudscore_db1”,選定“createdatabasestudscore_db1”,單擊“
”按鈕,經(jīng)“分析”提示“命令已成功”,表示沒有錯誤,否則提示錯誤信息,找出錯誤并修改。(3)單擊“
”按鈕,提示“命令已成功完成”。右擊“對象資源管理器”下面的“數(shù)據(jù)庫”,彈出快捷菜單,單擊“刷新”,可見數(shù)據(jù)庫studscore_db1,創(chuàng)建成功。(4)單擊“保存”按鈕,保存SQLQuery1.sql文件(該腳本文件以后操作時還會用到,打開這個腳本文件,可以看到以前的操作)。4.3.1
創(chuàng)建數(shù)據(jù)庫1.命令方式創(chuàng)建數(shù)據(jù)庫1)創(chuàng)建數(shù)據(jù)庫的最簡語法創(chuàng)建數(shù)據(jù)庫的完整語法代碼如下:createdatabasedatabase_name[on[primary][<filespec>[,...n]][,<filegroupspec>[,...n]]][logon{<filespec>[,...n]}]4.3.1
創(chuàng)建數(shù)據(jù)庫1.命令方式創(chuàng)建數(shù)據(jù)庫2)創(chuàng)建數(shù)據(jù)庫的完整語法參數(shù)說明:<filespec>=([name=logical_file_name,])filename='os_file_name'[,size=size][,maxsize={max_size|unlimited}][,filegrowth=growth_increment])[,...n]<filegroupspec>=filefroupfilegroup_name<filespec>[,...n]4.3.1
創(chuàng)建數(shù)據(jù)庫1.命令方式創(chuàng)建數(shù)據(jù)庫2)創(chuàng)建數(shù)據(jù)庫的完整語法(1)on:用來存儲數(shù)據(jù)庫數(shù)據(jù)部分的磁盤文件(數(shù)據(jù)文件)。該關(guān)鍵字后面跟以逗號分隔的<filespec>項(xiàng)列表,用于定義主文件組的數(shù)據(jù)文件。(2)n:占位符,表示可重復(fù)前面的定義部分,即還可以有多個。(3)logon:用來存儲數(shù)據(jù)庫日志的磁盤文件(日志文件)。該關(guān)鍵字后面跟以逗號分隔的<filespec>項(xiàng)列表,用于定義日志文件。如果沒有指定logon,那么系統(tǒng)將自動創(chuàng)建一個日志文件,該文件使用系統(tǒng)生成的名稱,大小為數(shù)據(jù)庫中所有數(shù)據(jù)文件總大小的25%。4.3.1
創(chuàng)建數(shù)據(jù)庫1.命令方式創(chuàng)建數(shù)據(jù)庫2)創(chuàng)建數(shù)據(jù)庫的完整語法(4)primary:指定關(guān)聯(lián)的<filespec>列表定義主文件。主文件組包含所有數(shù)據(jù)庫系統(tǒng)表。主文件組的第一個<filespec>條目為主文件,該文件包含數(shù)據(jù)庫的邏輯起點(diǎn)及其系統(tǒng)表。一個數(shù)據(jù)庫只能有一個主文件。如果沒有指定primary,那么列出的第一個文件將成為主文件。4.3.1
創(chuàng)建數(shù)據(jù)庫1.命令方式創(chuàng)建數(shù)據(jù)庫2)創(chuàng)建數(shù)據(jù)庫的完整語法(5)name:為由<filespec>定義的文件指定邏輯名稱。有以下幾種形式:①logical_file_name:用于在創(chuàng)建數(shù)據(jù)庫后執(zhí)行T-SQL語句中引用文件的名稱。logical_file_name在數(shù)據(jù)庫中必須唯一,且符合標(biāo)識符的規(guī)則。②filename:為<filespec>定義的文件指定操作系統(tǒng)文件名,包括使用的路徑和文件名。③os_file_name:操作系統(tǒng)創(chuàng)建<filespec>定義的物理文件時使用的路徑名和文件名。os_file_name不能指定壓縮文件系統(tǒng)中的目錄。4.3.1
創(chuàng)建數(shù)據(jù)庫1.命令方式創(chuàng)建數(shù)據(jù)庫2)創(chuàng)建數(shù)據(jù)庫的完整語法(6)size:指定<filespec>中定義的文件的大小。如果主文件的<filespec>中沒有提供size參數(shù),那么SQLServer將使用model數(shù)據(jù)庫中的主文件大小。如果指定了輔助數(shù)據(jù)文件或日志文件,但沒有指定該文件的size,則默認(rèn)值為1MB。4.3.1
創(chuàng)建數(shù)據(jù)庫1.命令方式創(chuàng)建數(shù)據(jù)庫2)創(chuàng)建數(shù)據(jù)庫的完整語法(7)maxsize:指定<filespec>中定義的文件可以增長到的最大大小。(8)unlimited:指定<filespec>中定義的文件將增長到磁盤變滿為止。(9)filegrowth:指定<filespec>中定義的文件的增長增量。文件的filegrowth設(shè)置不能超過maxsize設(shè)置。如果沒有指定filegrowth,則默認(rèn)值為10%。(10)growth_increment:需要新的空間時為文件添加的空間大小。指定一個整數(shù),不要包含小數(shù)。4.3.1
創(chuàng)建數(shù)據(jù)庫1.命令方式創(chuàng)建數(shù)據(jù)庫2)創(chuàng)建數(shù)據(jù)庫的完整語法例4-2創(chuàng)建數(shù)據(jù)庫studscore_ds1,數(shù)據(jù)文件和日志文件存放在D:\sq,主文件邏輯名稱studscore_ds1_data1,物理文件名studscore_ds1_data1.mdf,初始大小為5MB,最大為無限大,增長速度10%,日志文件邏輯名稱studscore_ds1_log1,物理文件名studscore_ds1_log1.ldf,初始大小3MB,最大8MB,增長速度1MB。4.3.1
創(chuàng)建數(shù)據(jù)庫1.命令方式創(chuàng)建數(shù)據(jù)庫2)創(chuàng)建數(shù)據(jù)庫的完整語法操作步驟如下:第一步:在D盤創(chuàng)建文件夾sq,然后在SQLQuery1.sql文件中,輸入如下代碼:4.3.1
創(chuàng)建數(shù)據(jù)庫1.命令方式創(chuàng)建數(shù)據(jù)庫2)創(chuàng)建數(shù)據(jù)庫的完整語法createdatabasestudscore_ds1on(name=studscore_ds1_data1,filename='D:\sq\studscore_ds1_data1.mdf',size=5,maxsize=unlimited,4.3.1
創(chuàng)建數(shù)據(jù)庫1.命令方式創(chuàng)建數(shù)據(jù)庫2)創(chuàng)建數(shù)據(jù)庫的完整語法filegrowth=10%)logon(name=studscore_ds1_log1,filename='D:\sq\studscore_ds1_log1.ldf',size=3,maxsize=8,filegrowth=1)12第二步:選定上述代碼,單擊“
”按鈕,提示“命令已成功完成”,再單擊“
”按鈕。第三步:鼠標(biāo)右擊“對象資源管理器”下的“數(shù)據(jù)庫”,彈出快捷菜單,再單擊“刷新”按鈕,可見創(chuàng)建的數(shù)據(jù)庫studscore_ds1。4.3.1
創(chuàng)建數(shù)據(jù)庫1.命令方式創(chuàng)建數(shù)據(jù)庫2)創(chuàng)建數(shù)據(jù)庫的完整語法
例4-3創(chuàng)建數(shù)據(jù)庫studscore_ds2,包括3個數(shù)據(jù)文件、1個文件組和1個日志文件,自主設(shè)置參數(shù)值。操作步驟同上,代碼如下:createdatabasestudscore_ds2on(name=studscore_ds2_data1,
--主數(shù)據(jù)文件,主文件組filename='D:\sq\studscore_ds2_data1.mdf',size=3mb,maxsize=10mb,filegrowth=10%),4.3.1
創(chuàng)建數(shù)據(jù)庫1.命令方式創(chuàng)建數(shù)據(jù)庫2)創(chuàng)建數(shù)據(jù)庫的完整語法filegroupfg1
--創(chuàng)建文件組(name=studscore_ds2_data2,
--次數(shù)據(jù)文件filename='D:\sq\studscore_ds2_data2.ndf',size=3mb,maxsize=10mb,filegrowth=10%),(name=studscore_ds2_data3,
--次數(shù)據(jù)文件filename='D:\sq\studscore_ds2_data3.ndf',size=3mb,maxsize=10mb,filegrowth=10%)logon4.3.1
創(chuàng)建數(shù)據(jù)庫1.命令方式創(chuàng)建數(shù)據(jù)庫2)創(chuàng)建數(shù)據(jù)庫的完整語法(name=studscore_ds2_log1,
--日志文件filename='D:\sq\studscore_ds2_log1.ldf',size=2,maxsize=4,filegrowth=1)說明:“--”起注釋作用,在代碼中不會被執(zhí)行。4.3.1
創(chuàng)建數(shù)據(jù)庫1.命令方式創(chuàng)建數(shù)據(jù)庫2)創(chuàng)建數(shù)據(jù)庫的完整語法操作步驟如下:(1)在“對象資源管理器”中找到“數(shù)據(jù)庫”節(jié)點(diǎn),右擊該節(jié)點(diǎn),在彈出的快捷菜單中選擇“新建數(shù)據(jù)庫”命令,彈出如圖4-3所示的對話框。4.3.1
創(chuàng)建數(shù)據(jù)庫2.菜單方式創(chuàng)建數(shù)據(jù)庫圖4-3“新建數(shù)據(jù)庫”對話框(1)(2)在“新建數(shù)據(jù)庫”對話框的“常規(guī)”選項(xiàng)卡中,可輸入數(shù)據(jù)庫名稱、數(shù)據(jù)庫文件和事務(wù)日志文件的邏輯名稱,設(shè)置其初始大小、自動增長、路徑等參數(shù),如圖4-4所示。4.3.1
創(chuàng)建數(shù)據(jù)庫2.菜單方式創(chuàng)建數(shù)據(jù)庫圖4-4“新建數(shù)據(jù)庫”對話框(2)如果需要再添加數(shù)據(jù)庫文件或事務(wù)日志文件,可單擊“添加”按鈕,添加相應(yīng)的文件;反之,也可刪除不需要的數(shù)據(jù)庫文件或事務(wù)日志文件。如果需要添加文件組,可在“文件組”選項(xiàng)卡中,單擊“添加”按鈕,添加相應(yīng)的文件組;反之,也可刪除不需要的文件組。此處,數(shù)據(jù)庫名稱為studscore_ds1。4.3.1
創(chuàng)建數(shù)據(jù)庫2.菜單方式創(chuàng)建數(shù)據(jù)庫“數(shù)據(jù)庫文件”項(xiàng)下的主數(shù)據(jù)文件名為studscore_ds1_data1;“文件類型”處顯示為“行數(shù)據(jù)”,“文件組”為PRIMARY。在“初始大小”處輸入5,表示文件初始大小為5MB。單擊“自動增長”后面的按鈕“
”,在彈出的對話框中進(jìn)行相應(yīng)的設(shè)置,如設(shè)置為10%,文件最大大小為不限制增長。單擊“路徑”后面的按鈕“
”,選擇文件存儲路徑為D:\sq。4.3.1
創(chuàng)建數(shù)據(jù)庫2.菜單方式創(chuàng)建數(shù)據(jù)庫“數(shù)據(jù)庫文件”項(xiàng)下的日志文件名為studscore_ds1_log1;“文件類型”處顯示為“日志”,“文件組”顯示為“不適用”。在“初始大小”處輸入3,表示文件初始大小為3MB。在“自動增長”下單擊后面的按鈕“
”,在彈出的對話框中進(jìn)行相應(yīng)的設(shè)置,如設(shè)置為1MB,文件最大大小為8MB。單擊“路徑”后面的按鈕“
”,選擇文件存儲路徑為D:\sq。(3)單擊“確定”按鈕,數(shù)據(jù)庫文件創(chuàng)建成功。4.3.1
創(chuàng)建數(shù)據(jù)庫2.菜單方式創(chuàng)建數(shù)據(jù)庫在SSMS中可以用dropdatabase命令一次刪除一個或多個數(shù)據(jù)庫。只有數(shù)據(jù)庫所有者和數(shù)據(jù)庫管理員才有權(quán)執(zhí)行此命令。刪除數(shù)據(jù)庫語法如下:dropdatabasedatabase_name[,...n]例4-4刪除例4-1中創(chuàng)建的學(xué)生成績數(shù)據(jù)庫(studscore_db1)。操作步驟如下:(1)在SQLQuery1.sql中輸入命令:dropdatabasestudscore_db1(2)選中輸入的命令代碼,單擊“
”按鈕,無誤則再單擊“
”按鈕,顯示“命令已成功”,表示數(shù)據(jù)庫studscore_db1被刪除。4.3.2
刪除數(shù)據(jù)庫1.命令方式刪除數(shù)據(jù)庫在SSMS中可以用菜單方式刪除數(shù)據(jù)庫。例如,刪除在例4-1中創(chuàng)建的學(xué)生成績數(shù)據(jù)庫(studscore_db1)。操作步驟如下:(1)在“對象資源管理器”下單擊“數(shù)據(jù)庫”前的“+”,展開。在數(shù)據(jù)庫“studscore_db1”上右擊鼠標(biāo)彈出快捷菜單,單擊“刪除”命令。(2)進(jìn)入“刪除對象”對話框,勾選“關(guān)閉現(xiàn)有連接(C)”,再單擊“確定”按鈕,如圖4-5所示。4.3.2
刪除數(shù)據(jù)庫2.菜單方式刪除數(shù)據(jù)庫圖4-5“刪除數(shù)據(jù)庫”對話框在SSMS中可以用alterdatabase命令來增加或刪除數(shù)據(jù)庫中的文件,修改文件的屬性。
1)語法格式2)實(shí)際操作命令方式修改數(shù)據(jù)庫4.3.3
修改數(shù)據(jù)庫1.命令方式修改數(shù)據(jù)庫alterdatabase命令的語法格式如下:alterdatabasedatabasename{addfile<filespec>[,...n][tofilegroupfilegroup_name]|addlogfile<filespec>[,...n]
--添加|addfilegroupfilrgroup_name|removefilelogical_file_name
--刪除|removefilegroupfilrgroup_name|modifyfile<filespec>
--修改|modifyname=new_dbname|modifyfilegroupfilegroup_name}4.3.3
修改數(shù)據(jù)庫1.命令方式修改數(shù)據(jù)庫1)語法格式其中:<filespec>=(name=logical_file_name[,newname=new_logical_name][,filename='os_file_name'][,size=size][,maxsize={max_size|unlimited}][,filegrowth=growth_increment])4.3.3
修改數(shù)據(jù)庫1.命令方式修改數(shù)據(jù)庫1)語法格式(1)向數(shù)據(jù)庫添加文件,包括數(shù)據(jù)文件、日志文件、文件組。例4-5修改學(xué)生成績數(shù)據(jù)庫studscore_ds1,添加一個5MB的次數(shù)據(jù)文件studscore_ds1_data2。代碼如下:alterdatabasestudscore_ds1addfile(name=studscore_ds1_data2,filename='D:\sq\studscore_ds1_data2.ndf',size=5mb,maxsize=10mb,filegrowth=5mb)(2)刪除數(shù)據(jù)庫中的文件、文件組。4.3.3
修改數(shù)據(jù)庫1.命令方式修改數(shù)據(jù)庫2)實(shí)際操作例4-6修改學(xué)生成績數(shù)據(jù)庫studscore_ds1,刪除次數(shù)據(jù)文件studscore_ds1_data2。代碼如下:alterdatabasestudscore_ds1removefilestudscore_ds1_data21.命令方式修改數(shù)據(jù)庫2)實(shí)際操作4.3.3
修改數(shù)據(jù)庫在“對象資源管理器”下單擊“數(shù)據(jù)庫”前面的“+”,展開數(shù)據(jù)庫文件夾,在需要修改的數(shù)據(jù)庫上右擊鼠標(biāo),彈出快捷菜單,單擊“屬性”選項(xiàng),進(jìn)入“數(shù)據(jù)庫屬性”頁,在“文件”“文件組”選項(xiàng)卡可以進(jìn)行數(shù)據(jù)庫文件、文件組的“添加”“刪除”等操作。4.3.3
修改數(shù)據(jù)庫2.菜單方式修改數(shù)據(jù)庫4.4數(shù)據(jù)表定義數(shù)據(jù)定義語言(DDL)的主要功能是定義數(shù)據(jù)庫的模式,包括概念模式、外模式和內(nèi)模式。在SQL中對于不同的模式分別定義了一系列的語句。通過這些語句,數(shù)據(jù)庫管理員(DBA)可以創(chuàng)建和維護(hù)數(shù)據(jù)庫模式結(jié)構(gòu)。數(shù)據(jù)庫的三級模式結(jié)構(gòu)的核心是概念模式,它在SQL數(shù)據(jù)庫中表現(xiàn)為基本表的集合。4.4
數(shù)據(jù)表定義2.列1.表名3.完整性約束一個數(shù)據(jù)表由表名、列和完整性約束構(gòu)成。具體如下:4.4.1
數(shù)據(jù)表的構(gòu)成表名代表關(guān)系模式的名字,一般以字母開頭,并可包含字母、數(shù)字、#、_、@、$等符號。在一個數(shù)據(jù)庫中,表名不能重復(fù),表的核心構(gòu)成是列和完整性約束。4.4.1
數(shù)據(jù)表的構(gòu)成1.表名表名代表關(guān)系模式的名字,一般以字母開頭,并可包含字母、數(shù)字、#、_、@、$等符號。在一個數(shù)據(jù)庫中,表名不能重復(fù),表的核心構(gòu)成是列和完整性約束。2.列約束(Constraint)是指附加在表上,通過限制列中、行中、表之間的數(shù)據(jù)來保證數(shù)據(jù)完整性的一種數(shù)據(jù)庫對象。在表定義中,約束可以定義在每個列定義中,也可以在所有列定義之后再單獨(dú)定義。把直接定義在一個列定義之后的約束稱為列約束,把定義在全部列定義之后的約束稱為表約束。列約束和表約束在語義上沒什么差別,只是位置不同而已,單列上的約束可以定義成列約束也可以定義成表約束。如果某個約束需要定義在多個列之上,則必須通過表約束來實(shí)現(xiàn)。4.4.1
數(shù)據(jù)表的構(gòu)成3.完整性約束2)參照完整性4)用戶自定義完整性3)域完整性1)實(shí)體完整性數(shù)據(jù)的完整性就是指存儲在數(shù)據(jù)庫中的數(shù)據(jù)的準(zhǔn)確性和一致性,通過實(shí)體完整性、參照完整性、域完整性和用戶自定義完整性等完整性約束來實(shí)現(xiàn)。具體如下:4.4.1
數(shù)據(jù)表的構(gòu)成3.完整性約束實(shí)體完整性也稱行完整性,要求表中不能有重復(fù)的行存在??梢酝ㄟ^設(shè)置主鍵約束
(PrimaryKey)、標(biāo)識列屬性(Identity)、唯一性約束(Unique)、唯一索引(UniqueIndex)等方法加以實(shí)現(xiàn)。1)實(shí)體完整性4.4.1
數(shù)據(jù)表的構(gòu)成3.完整性約束參照完整性也稱引用完整性,要求相關(guān)數(shù)據(jù)表中的數(shù)據(jù)保持一致性,即主鍵(被參照表)和外鍵之間的關(guān)系能夠得到維護(hù)。設(shè)置外鍵約束(ForeignKey)、存儲過程及觸發(fā)器等方法加以實(shí)現(xiàn)。如果被參考表(父表)中的一行被一個外鍵(books表—categorycode類別代碼)所參照,那么這一行數(shù)據(jù)便不能被直接刪除,用戶也不能直接修改主鍵(categories表—categorycode)值,如圖4-6所示。2)參照完整性4.4.1
數(shù)據(jù)表的構(gòu)成3.完整性約束圖4-6
參照完整性域完整性也稱列完整性,指定列的輸入有效性。通過限制列的類型、格式、可能值的范圍等方法加以實(shí)現(xiàn),如設(shè)置檢查約束(check)或規(guī)則。3)域完整性4.4.1
數(shù)據(jù)表的構(gòu)成3.完整性約束所有完整性類別都支持用戶定義完整性,包括createtable中所有列級約束和表級約束、存儲過程、觸發(fā)器。例如,訂單表orders中,shipdate(發(fā)貨日期)不能早于orderdate(訂貨日期)。4)用戶自定義完整性4.4.1
數(shù)據(jù)表的構(gòu)成3.完整性約束創(chuàng)建數(shù)據(jù)庫后,需要使用SQL語句createtable創(chuàng)建數(shù)據(jù)表。其語法格式如下:createtable[databasename.][schemaname.]<tablename>({<columndef>
--定義表中的列|<computedcolumndefinition>}
--定義計(jì)算列[primarykey(column[,...n])]
--定義主鍵,表級約束[foreignkey(column[,...n])referencesreferencedtablename[(refcolumn[,...n])]]--定義外鍵,表級外鍵)[on{filegroup|'default'}]--指定表定義在數(shù)據(jù)庫的哪個文件組中[textimage_on{filegroup|'default'}]--大類型列存儲文件組4.4.2
創(chuàng)建表1.命令方式創(chuàng)建表1)創(chuàng)建表的命令和語法格式其中:<columndef>=columnnamedatatype
--定義列名、數(shù)據(jù)類型[null|notnull]
--允許空值/不允許有空值[identity[(seed,increment)]]
--定義標(biāo)識列(種子、增量)[defaultconstantexpression]
--定義默認(rèn)值,自動填充[primarykey]
--列級主鍵[foreignkey]referencesreferencedtablename[(refcolumn)]其中:<computedcolumndefinition>=columnnameascoputedcolumnexpression[persisted]--計(jì)算列,標(biāo)記persisted,則表中存儲計(jì)算列中的數(shù)據(jù)。4.4.2
創(chuàng)建表1.命令方式創(chuàng)建表1)創(chuàng)建表的命令和語法格式首先,創(chuàng)建表時主要是對列的定義以及添加約束。列約束必須在每個列定義后再進(jìn)行定義,只對當(dāng)前列有效。其次,表的約束按應(yīng)用范圍分為列級和表級約束。此外,按作用可分為主鍵約束、不允許空約束、默認(rèn)值約束、唯一性約束、檢查約束、外鍵約束等。需要指出,當(dāng)一個約束中必須包含多個列時,須使用表約束。單列上的約束可以用列約束,也可用表約束。4.4.2
創(chuàng)建表1.命令方式創(chuàng)建表2)定義列和約束定義列的基本格式如下:<列名><列類型>[default<默認(rèn)值>][[not]null][<列約束>]定義約束的基本格式如下:[constraint<約束名>]<約束類型>說明:約束名可以省略。4.4.2
創(chuàng)建表1.命令方式創(chuàng)建表2)定義列和約束例4-7創(chuàng)建學(xué)生情況表student,包括s#、sname、age、sex等列,帶主鍵、不允許空值、默認(rèn)值等約束。代碼如下:createtablestudent(s#varchar(10)constraintpk_s#primarykey,snamevarchar(20)notnull,ageint,sexchar(2)default'男')4.4.2
創(chuàng)建表1.命令方式創(chuàng)建表2)定義列和約束例4-8以創(chuàng)建學(xué)生情況表student為例,在創(chuàng)建表時分別使用列約束和表約束。此時,需要先刪除例4-7創(chuàng)建的表student。代碼如下:createtablestudent(s#varchar(10)constraintpk_s#primarykey,
--列約束snamevarchar(20),ageintconstraintck_agecheck(age>14andage<100),sexchar(2),constraintuq_snameunique(sname),
--表約束constraintck_sexcheck(sexin('男','女')))上例中,列約束和表約束各有2個。4.4.2
創(chuàng)建表1.命令方式創(chuàng)建表2)定義列和約束(1)primarykey約束。在SQLServer中,主鍵(primarykey)保證實(shí)體完整性,可以是單列,也可以是多列組合。其特點(diǎn)為:一個表只能定義一個主鍵約束;主鍵約束所在列(或組合值)不允許輸入重復(fù)值;所在列不允許取空值;主鍵約束自動在指定的列上創(chuàng)建了一個唯一性索引,默認(rèn)為聚集索引。4.4.2
創(chuàng)建表1.命令方式創(chuàng)建表3)創(chuàng)建帶約束的表語法格式如下:constraintconstraintnameprimarykey[clustered|nonclustered][(column[,...n])]說明:設(shè)置主鍵時系統(tǒng)自動創(chuàng)建索引,默認(rèn)clustered,創(chuàng)建聚集索引;如果需要創(chuàng)建非聚集索引,指定nonclustered。如果是列級主鍵約束,不指定列;如果是表級主鍵約束,則指定主鍵所在列。4.4.2
創(chuàng)建表1.命令方式創(chuàng)建表3)創(chuàng)建帶約束的表例4-9創(chuàng)建圖書分類表categories,用于存放圖書的類別信息,categorycode設(shè)為主鍵。代碼如下:createtablecategories(categorycodenchar(4)primarykey,categorynamenvarchar(50)notnull)說明:本例中,只有列級約束,而且該主鍵約束沒有指定約束名,由系統(tǒng)自動添加約束名。4.4.2
創(chuàng)建表1.命令方式創(chuàng)建表3)創(chuàng)建帶約束的表例4-10
創(chuàng)建選課成績表sc,用于存放學(xué)生的成績,其中s#和c#組成復(fù)合主鍵。代碼如下:createtablesc(s#varchar(10),
--學(xué)生學(xué)號c#varchar(20),
--課程編號scorefloat,constraintpk_s#c#primarykey(s#,c#))4.4.2
創(chuàng)建表1.命令方式創(chuàng)建表3)創(chuàng)建帶約束的表復(fù)合主鍵即多個字段(列)組合作為主鍵。在選課關(guān)系中,一個學(xué)生可以選多門課程,同一門課程可以被多個學(xué)生選修,學(xué)生與課程之間是多對多的關(guān)系,因此,在選課成績表sc中,必須以學(xué)號s#和課程號c#組合在一起作為主鍵。在定義表級約束時,需要列出字段名(列名),并且復(fù)合主鍵只能是表級形式。4.4.2
創(chuàng)建表1.命令方式創(chuàng)建表3)創(chuàng)建帶約束的表例4-11
創(chuàng)建表orderitems,用于存放訂單項(xiàng)目信息,主鍵約束設(shè)置在orderid和bookid列上。代碼如下:createtableorderitems(orderidchar(10)notnull,bookidchar(10)notnull,quantityintnotnulldefault(),pricedecimal(6,2),totalasprice*quantity,constraintpk_orderitems_orderidbookidprimarykey(orderid,bookid))4.4.2
創(chuàng)建表1.命令方式創(chuàng)建表3)創(chuàng)建帶約束的表例4-12
創(chuàng)建圖書信息表books,用于存放圖書信息,其中bookid設(shè)為主鍵,約束名pk_books_bookid,且bookid設(shè)為標(biāo)識列,由101開始每次自動增長1。代碼如下:createtablebooks(bookidintidentity(101,1)constraintpk_books_bookidprimarykey,titlenvarchar(50)notnull,isbnnchar(20)notnull,authornvarchar(50),unitpricedecimal(6,2),categorycodenchar(4))4.4.2
創(chuàng)建表1.命令方式創(chuàng)建表3)創(chuàng)建帶約束的表例4-13
創(chuàng)建學(xué)生信息表studinfo,代碼如下:createtablestudinfo(studnovarchar(15)primarykey,studnamevarchar(20)notnull,studsexchar(2)default'男'notnull,studbirthdaydatetimenull,classidvarchar(10)notnull)4.4.2
創(chuàng)建表1.命令方式創(chuàng)建表3)創(chuàng)建帶約束的表例4-14
創(chuàng)建班級信息表classinfo,代碼如下:createtableclassinfo(classidvarchar(10)primarykey,classnamevarchar(50)notnull,classdescvarchar(100)null)4.4.2
創(chuàng)建表1.命令方式創(chuàng)建表3)創(chuàng)建帶約束的表例4-15
此題在完成例4-16之后進(jìn)行,在customers表中,為customerid列添加主鍵約束,約束名為pk_customers_customerid。代碼如下:altertablecustomersaddconstraintpk_customers_customeridprimarykey(customerid)(2)default約束。默認(rèn)值(default)約束的語法格式如下:default<值>4.4.2
創(chuàng)建表1.命令方式創(chuàng)建表3)創(chuàng)建帶約束的表default約束的特點(diǎn)為:每個列只能定義一個默認(rèn)值;默認(rèn)值不能引用其他列或其他表、視圖或存儲過程;不能放在identity列或timestamp列。當(dāng)向表中插入一條新記錄時,如果某列上有默認(rèn)值,并且新記錄中未指定該列的值,則自動以默認(rèn)值填充。設(shè)置默認(rèn)值約束時應(yīng)注意,如果默認(rèn)值是字符型,要加單引號;如果默認(rèn)值是數(shù)值,則直接寫出數(shù)值。4.4.2
創(chuàng)建表1.命令方式創(chuàng)建表3)創(chuàng)建帶約束的表例4-16
創(chuàng)建用戶信息表customers,列rating設(shè)為默認(rèn)值約束,默認(rèn)值為5(常量)。代碼如下:createtablecustomers(customeridvarchar(2)primarykeynotnull,customernamevarchar(20)null,emailaddressvarchar(50),ratingvarchar(2)default5,passidvarchar(8))4.4.2
創(chuàng)建表1.命令方式創(chuàng)建表3)創(chuàng)建帶約束的表例4-17
使用insert命令向student表中添加一條記錄,輸入下列代碼,并執(zhí)行。insertintostudent(s#,sname,age)values('2018010101','張真',20)表student中列sex的值以默認(rèn)值自動填充為“男”,其結(jié)果如表4-10所示。4.4.2
創(chuàng)建表1.命令方式創(chuàng)建表3)創(chuàng)建帶約束的表s#snameagesex2018010101張真20男表4-10向表中添加記錄例4-18
創(chuàng)建訂單表orders(orderid、orderdate、shipdate、customerid),然后為orderdate列添加一個默認(rèn)值約束,默認(rèn)值為當(dāng)前系統(tǒng)時間,當(dāng)前系統(tǒng)時間由getdate()產(chǎn)生。代碼如下:altertableordersaddconstraintdf_orders_orderdatedefaultgetdate()fororderdate4.4.2
創(chuàng)建表1.命令方式創(chuàng)建表3)創(chuàng)建帶約束的表(3)unique約束。唯一性(unique)約束是指表中的某一列或多列不能有相同的兩行或多行數(shù)據(jù)存在。其特點(diǎn)為:不能是主鍵約束所在列;每個表可以定義多個唯一性約束;約束所在列不允許輸入重復(fù)值(或組合值不重復(fù));所在列允許有空值;在指定列自動創(chuàng)建一個唯一性索引,默認(rèn)非聚集索引。4.4.2
創(chuàng)建表1.命令方式創(chuàng)建表3)創(chuàng)建帶約束的表4.4.2
創(chuàng)建表1.命令方式創(chuàng)建表3)創(chuàng)建帶約束的表主鍵約束和唯一性約束既有相同點(diǎn),也有不同點(diǎn),具體如下:相同點(diǎn):關(guān)鍵字值不允許重復(fù);創(chuàng)建唯一性索引來保證實(shí)體完整性。不同點(diǎn):是否取空值;可以定義一個還是多個約束。unique約束的語法格式如下:constraintconstraintnameunique[clustered|nonclustered][(column[,...])]例4-19
在customers表中,為列emailaddress設(shè)置唯一性約束。代碼如下:altertablecustomersaddconstraintuq_customers_emailaddressunique(emailaddress)4.4.2
創(chuàng)建表1.命令方式創(chuàng)建表3)創(chuàng)建帶約束的表例4-20
創(chuàng)建學(xué)生信息表student1。注意,pk_s#在數(shù)據(jù)庫中不能重復(fù),需要修改。代碼如下:createtablestudent1(s#varchar(10)constraintpk_s#primarykey,snamevarchar(20)constraintuq_sunique,ageint,sexchar(2),classidnchar(20),constraintuq_ssunique(classid))4.4.2
創(chuàng)建表1.命令方式創(chuàng)建表3)創(chuàng)建帶約束的表例4-21
創(chuàng)建部門信息表department。注意,組合值具有唯一性約束。代碼如下:createtabledepartment(numbervarchar(10)primarykey,namenchar(10),majorvarchar(20),schoolnchar(20),constraintuq_name_schoolunique(name,school))4.4.2
創(chuàng)建表1.命令方式創(chuàng)建表3)創(chuàng)建帶約束的表unique約束對空值的處理:若唯一性約束列中有一列不為空,就實(shí)施約束;若唯一性約束列都為空,則不實(shí)施約束,如圖4-7所示。4.4.2
創(chuàng)建表1.命令方式創(chuàng)建表3)創(chuàng)建帶約束的表圖4-7
唯一性約束(4)foreignkey約束。在SQLServer中,使用外鍵(foreignkey)保證參照完整性。外鍵約束用于建立和加強(qiáng)兩個表之間的連接的一列或多列,也就是表中某列值引用其他表的主鍵列或unique列。外鍵表的被約束列的取值,必須是主鍵表的被約束列的值。其特點(diǎn)為:每個表可以定義多個外鍵約束;外鍵表中被約束的列必須和主鍵表中被約束的列寬度一致、數(shù)據(jù)類型一致;外鍵約束不能自動創(chuàng)建索引;當(dāng)向設(shè)有外鍵約束的表(子表)中插入記錄或更新記錄時,該記錄被約束列的值必須在參照的主鍵表(父表)中存在。4.4.2
創(chuàng)建表1.命令方式創(chuàng)建表3)創(chuàng)建帶約束的表foreignkey約束的語法格式如下:constraintconstraintnameforeignkey(column[,...n])referencesreftable(refcolumn[,...n])[ondelete{noaction|cascade|setnull|setdefault}][onupdate{noaction|cascade|setnull|setdefault}]4.4.2
創(chuàng)建表1.命令方式創(chuàng)建表3)創(chuàng)建帶約束的表參數(shù)說明:·references:指定該外鍵參考哪個父表中的哪個主鍵列?!ndelete:說明如果已創(chuàng)建表中的行具有參照關(guān)系,并且被引用行已從父表中刪除,則對這些行采取的操作?!つJ(rèn)noaction:表示數(shù)據(jù)庫引擎將引發(fā)錯誤,并回滾對父表中相應(yīng)行的刪除操作?!ascade:表示級聯(lián)刪除,如果父表中刪除一行,則將從參照表中刪除相應(yīng)行。4.4.2
創(chuàng)建表1.命令方式創(chuàng)建表3)創(chuàng)建帶約束的表·setnull:表示如果父表中對應(yīng)的行被刪除,則子表中組成外鍵的所有值將設(shè)置為null。若要執(zhí)行此約束,外鍵列必須可為空值?!etdefault:表示如果父表中對應(yīng)的行被刪除,則子表中組成外鍵的所有值都將設(shè)置為默認(rèn)值。若要執(zhí)行此約束,所有外鍵列都必須有默認(rèn)值定義。如果某個列可為空值,并且未設(shè)置顯式的默認(rèn)值,則會使用null作為該列的隱式默認(rèn)值?!nupdate:用于說明如果表中發(fā)生更新的行有參照關(guān)系,并且被引用行在父表中已更新,則這些行將發(fā)生什么操作。(同上)4.4.2
創(chuàng)建表1.命令方式創(chuàng)建表3)創(chuàng)建帶約束的表例4-22
創(chuàng)建學(xué)生信息表studinfo,在classid列設(shè)外鍵約束,與表classinfo的classid關(guān)聯(lián)。第一步,刪除已經(jīng)存在的表studinfo。代碼如下:droptablestudinfo4.4.2
創(chuàng)建表1.命令方式創(chuàng)建表3)創(chuàng)建帶約束的表第二步,創(chuàng)建帶外鍵的學(xué)生信息表studinfo。代碼如下:createtablestudinfo(studnovarchar(15)primarykey,studnamevarchar(20)notnull,studsexchar(2)notnull,studbirthdaydatetimenull,classidvarchar(10)constraintfk_cforeignkeyreferencesclassinfo(classid)notnull)4.4.2
創(chuàng)建表1.命令方式創(chuàng)建表3)創(chuàng)建帶約束的表4.4.2
創(chuàng)建表1.命令方式創(chuàng)建表3)創(chuàng)建帶約束的表例4-23
創(chuàng)建學(xué)生情況表student和選課成績表sc,其中sc是參照表(子表),student是被參照表(父表),字段s#作為外鍵,在表中添加外鍵約束。代碼如下:createtablestudent(s#varchar(10)constraintpk_s#primarykey,snamevarchar(20),ageint,sexchar(2)null,emailvarchar(50)check(emaillike'%_@%_.%_'))4.4.2
創(chuàng)建表1.命令方式創(chuàng)建表3)創(chuàng)建帶約束的表createtablesc(s#varchar(10)constraintfk_s#referencesstudent(s#),c#varchar(20),scorenumeric(5,1),primarykey(s#,c#))注意,如果student和sc已經(jīng)存在,需要刪除。先創(chuàng)建父表,再創(chuàng)建子表。4.4.2
創(chuàng)建表1.命令方式創(chuàng)建表3)創(chuàng)建帶約束的表例4-24
以例4-23為例,討論刪除、添加表sc的外鍵約束。第一步,刪除外鍵約束。代碼如下:altertablescdropconstraintfk_s#第二步,只添加外鍵約束。代碼如下:altertablescaddconstraintfk_s#foreignkey(s#)referencesstudent(s#)4.4.2
創(chuàng)建表1.命令方式創(chuàng)建表3)創(chuàng)建帶約束的表或者,添加外鍵約束,并且設(shè)置級聯(lián)刪除選項(xiàng)。代碼如下:altertablescaddconstraintfk_s#foreignkey(s#)referencesstudent(s#)ondeletecascade說明:如果設(shè)置了ondeletecascade(級聯(lián)刪除),那么在刪除記錄時,刪除父表中的記錄,則相應(yīng)地會刪除子表中相關(guān)聯(lián)的記錄。4.4.2
創(chuàng)建表1.命令方式創(chuàng)建表3)創(chuàng)建帶約束的表例4-25
在orderitems表中,為bookid列添加外鍵約束,該列的取值要參照books表中的bookid列,約束名fk_oderitems_bookid。如果刪除books表中的一條記錄,則orderitems表參照該圖書的記錄也相應(yīng)刪除。代碼如下:altertableorderitemsaddconstraintfk_oderitems_bookidforeignkey(bookid)referencesbooks(bookid)ondeletecascade4.4.2
創(chuàng)建表1.命令方式創(chuàng)建表3)創(chuàng)建帶約束的表例4-26
在noaction情況下,已知student和sc表的參照關(guān)系如圖4-8所示。insertintoscvalues('2018010105','大學(xué)英語',85)--erroroccurs!!deletefromstudentwheres#='2018010101'--erroroccurs!!圖4-8
參照完整性4.4.2
創(chuàng)建表1.命令方式創(chuàng)建表3)創(chuàng)建帶約束的表換句話說:①在子表sc中插入記錄時,若主表中對應(yīng)的列值不存在,則插入出錯。②刪除主表student中的記錄時,若有子表中的相應(yīng)記錄存在,也出錯。當(dāng)然,若設(shè)置了級聯(lián)刪除(ondeletecascade),則可以執(zhí)行刪除操作。4.4.2
創(chuàng)建表1.命令方式創(chuàng)建表3)創(chuàng)建帶約束的表(5)check約束。檢查(check)約束用于驗(yàn)證輸入數(shù)據(jù)的有效性,從而保證域完整性。其特點(diǎn)為:每個表可以定義多個檢查約束;可以參考本表中的其他列;檢查約束不能放在identity列或timestamp列(它們自動插入數(shù)據(jù));插入或更新記錄時,滿足條件才能錄入。check約束的語法格式如下:constraintconstraintnamecheck(logicalexpression)4.4.2
創(chuàng)建表1.命令方式創(chuàng)建表3)創(chuàng)建帶約束的表下面列出幾種自定義檢查約束,供練習(xí)使用:constraintck_a1check(age>15)constraintck_s1check(sexin('男','女'))constraintck_sccheck(score>=0andscore<=100)constraintck_s2check(snameisnotnull)constraintck_s3check(postcodelike'[0-9][0-9][0-9][0-9][0-9][0-9]')constraintck_s4check(emaillike'%_@%_.%_')4.4.2
創(chuàng)建表1.命令方式創(chuàng)建表3)創(chuàng)建帶約束的表例4-27
創(chuàng)建表studscoreinfo,成績的初始值為0,其值范圍為0~100。代碼如下:createtablestudscoreinfo(studnovarchar(15),courseidvarchar(10),studscorenumeric(4,1)default0check(studscore>=0andstudscore<=100),constraintpk_scprimarykey(studno,courseid))4.4.2
創(chuàng)建表1.命令方式創(chuàng)建表3)創(chuàng)建帶約束的表例4-28
在訂單表orders中,檢查shipdate(發(fā)貨日期)≥orderdate(訂購日期),代碼如下:altertableordersaddconstraintck_orders_shipdatecheck(shipdate>=orderdate)(6)identity列。標(biāo)識(identity)列是由系統(tǒng)生成的標(biāo)識符列,序號值以唯一方式標(biāo)識表中的每一行。identity列的語法格式如下:identity[(seed,increment)]參數(shù)說明:seed為初值,increment為增量值;一個表只能有一個標(biāo)識列(int/decimal/numeric等類型的列),不能是空值null,也不能包含default定義或?qū)ο蟆?.4.2
創(chuàng)建表1.命令方式創(chuàng)建表3)創(chuàng)建帶約束的表例4-29
創(chuàng)建表studbdinfo,seq_id設(shè)為標(biāo)識列,初始值為1001,增量為1。代碼如下:createtablestudbdinfo(seq_idintidentity(1001,1),studnovarchar(15)primarykey,studnamevarchar(20)notnull)說明:seq_id的數(shù)據(jù)類型是int,可設(shè)置為標(biāo)識(identity)列;如果seq_id的數(shù)據(jù)類型是char,則不能設(shè)為標(biāo)識列。4.4.2
創(chuàng)建表2.菜單方式創(chuàng)建表1)創(chuàng)建表例4-30
創(chuàng)建學(xué)生信息表student,表的結(jié)構(gòu)同前所述。操作步驟如下:(1)在“對象資源管理器”中單擊數(shù)據(jù)庫文件studscore_ds1前面的“+”,展開數(shù)據(jù)庫節(jié)點(diǎn),右擊“表”的名稱或圖標(biāo),在彈出的快捷菜單中選擇“新建表”命令,如圖4-9所示圖4-9“新建表”快捷菜單4.4.2
創(chuàng)建表2.菜單方式創(chuàng)建表1)創(chuàng)建表(2)圖4-10是“表設(shè)計(jì)器”工作界面。第1列的列名為s#,數(shù)據(jù)類型為varchar(10)且長度改為10,取消“允許Null...”復(fù)選框中的“√”。s#列是表的主鍵,定義方法是單擊“表設(shè)計(jì)器”菜單下的“設(shè)置主鍵”命令,或鼠標(biāo)右擊s#列,在彈出的快捷菜單中選擇“設(shè)置主鍵”命令,在該列的前面出現(xiàn)一個金色的鑰匙圖標(biāo),表示該列是表的主鍵。圖4-10“表設(shè)計(jì)器”工作界面4.4.2
創(chuàng)建表2.菜單方式創(chuàng)建表1)創(chuàng)建表(3)依次設(shè)置表的其他列,如sname、age、sex等。表的列設(shè)計(jì)好以后,單擊工具欄上的“保存”按鈕,或右擊表的名稱,在彈出的“選擇名稱”對話框中輸入表名稱“student”,然后單擊“確定”按鈕,創(chuàng)建的表就被保存起來。4.4.2
創(chuàng)建表2.菜單方式創(chuàng)建表2)創(chuàng)建帶標(biāo)識列的表例4-31
創(chuàng)建表orders,其中訂單編號orderid是一個標(biāo)識列,而且是主鍵。orderdate列是訂貨日期,通常訂貨日期與系統(tǒng)日期相同,因此為該列定義一個默認(rèn)值,shipdate是發(fā)貨日期,customerid是訂貨的顧客的編號。shipdate可以為空值。操作步驟如下:(1)在“對象資源管理器”中單擊數(shù)據(jù)庫文件studscore_ds1前面的“+”,展開數(shù)據(jù)庫節(jié)點(diǎn),右擊“表”的名稱或圖標(biāo),在彈出的快捷菜單中選擇“新建表”命令。4.4.2
創(chuàng)建表2.菜單方式創(chuàng)建表2)創(chuàng)建帶標(biāo)識列的表(2)在“表設(shè)計(jì)器”界面中,第1列的列名為orderid,數(shù)據(jù)類型選擇int,取消“允許Null...”復(fù)選框中的“√”。在“列屬性”列表框中,展開“標(biāo)識規(guī)范”節(jié)點(diǎn),將“(是標(biāo)識)”屬性值改為“是”,“標(biāo)識增量”和“標(biāo)識種子”的值分別設(shè)為101、1。按此前的方法設(shè)置orderid為主鍵,如圖4-11所示。圖4-11
設(shè)置“標(biāo)識列”屬性4.4.2
創(chuàng)建表2.菜單方式創(chuàng)建表2)創(chuàng)建帶標(biāo)識列的表(3)第2列為orderdate,數(shù)據(jù)類型為datetime,不允許空值。接下來為該列添加一個默認(rèn)值約束。在“列屬性”框中,展開“常規(guī)”節(jié)點(diǎn),在“默認(rèn)值或綁定”屬性后面輸入getdate(),該函數(shù)的作用是獲取當(dāng)前系統(tǒng)日期和時間,如圖4-12所示。圖4-12設(shè)置“默認(rèn)值”屬性4.4.2
創(chuàng)建表2.菜單方式創(chuàng)建表2)創(chuàng)建帶標(biāo)識列的表(4)第3列為shipdate,數(shù)據(jù)類型為datetime,允許空值,設(shè)置一個檢查約束,要求發(fā)貨日期大于訂單日期。在“表設(shè)計(jì)器”中,在shipdate處單擊鼠標(biāo)右鍵,在彈出的快捷菜單中選擇“CHECK約束”命令,打開“CHECK約束”對話框,如圖4-13所示。圖4-13設(shè)置CHECK約束4.4.2
創(chuàng)建表2.菜單方式創(chuàng)建表2)創(chuàng)建帶標(biāo)識列的表在該對話框中的“標(biāo)識”選項(xiàng)卡定義約束名稱“ck_orders_shipdate”,在“常規(guī)”選項(xiàng)卡設(shè)置約束表達(dá)式([shipdate]>=[orderdate])。其他選項(xiàng)不動。(5)依次輸入其他列,然后單擊“保存”按鈕,輸入表名稱,單擊“確定”按鈕,帶約束的表創(chuàng)建完成。4.4.3
修改表1.命令方式修改表altertable命令可以添加或刪除表的列、約束,也可以禁用或啟用已存在的約束或觸發(fā)器。語法格式如下:altertable<表名>[altercolumn<列定義>]|
--修改列[add<列定義>]|
--增加列[dropcolumn<列名>]|
--刪除列[add<表約束>]|
--增加約束[dropconstraint<約束名>]
--刪除約束altertable語法較為復(fù)雜,這里
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 家用水龍頭過濾器產(chǎn)品供應(yīng)鏈分析
- 包裝用紙袋產(chǎn)品供應(yīng)鏈分析
- 工商管理輔助行業(yè)相關(guān)項(xiàng)目經(jīng)營管理報(bào)告
- 含藥喉嚨噴劑產(chǎn)品供應(yīng)鏈分析
- 發(fā)行預(yù)付費(fèi)代金券行業(yè)相關(guān)項(xiàng)目經(jīng)營管理報(bào)告
- 刷子用貉毛產(chǎn)業(yè)鏈招商引資的調(diào)研報(bào)告
- 年金保險(xiǎn)行業(yè)相關(guān)項(xiàng)目經(jīng)營管理報(bào)告
- 虛擬現(xiàn)實(shí)游戲用耳機(jī)項(xiàng)目運(yùn)營指導(dǎo)方案
- 安排和舉辦青年足球訓(xùn)練項(xiàng)目行業(yè)經(jīng)營分析報(bào)告
- 辦公家具出租行業(yè)相關(guān)項(xiàng)目經(jīng)營管理報(bào)告
- 2024屆高考語文復(fù)習(xí):小說敘述視角及其作用 課件
- 快遞人員安全管理
- 財(cái)務(wù)管理大學(xué)生的職業(yè)生涯規(guī)劃
- 平面向量共線定理和等和線課件
- 心理健康與環(huán)境適應(yīng)
- 五年級我學(xué)會了什么的作文500字
- 珠寶項(xiàng)目融資計(jì)劃書
- 農(nóng)貿(mào)市場規(guī)劃設(shè)計(jì)方案
- 中醫(yī)日間病房建設(shè)方案
- 廣東工業(yè)大學(xué)技術(shù)創(chuàng)新方法TRIZ理論及應(yīng)用課程報(bào)告
- 數(shù)字貨幣對支付清算行業(yè)的挑戰(zhàn)與機(jī)遇
評論
0/150
提交評論