sql 第04章章節(jié)課件_第1頁
sql 第04章章節(jié)課件_第2頁
sql 第04章章節(jié)課件_第3頁
sql 第04章章節(jié)課件_第4頁
sql 第04章章節(jié)課件_第5頁
已閱讀5頁,還剩92頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

第4章

數(shù)據(jù)庫管理本章導(dǎo)讀本章主要介紹了有關(guān)數(shù)據(jù)表的操作,包括表的創(chuàng)建、修改、刪除和建立索引等操作以及表中數(shù)據(jù)維護(hù)的有關(guān)操作和方法,基本掌握使用SQLServerManagementStudio和T-SQL語句對表的操作和表的數(shù)據(jù)操作,包括創(chuàng)建表、刪除表、對表中字段建立索引、向表中增加數(shù)據(jù)、修改數(shù)據(jù)、刪除數(shù)據(jù)等。讀者要對SQLServer2019中的數(shù)據(jù)類型有一個清楚的認(rèn)識。4.1數(shù)據(jù)庫的創(chuàng)建與管理

4.1.1SQLServer系統(tǒng)數(shù)據(jù)庫1.系統(tǒng)數(shù)據(jù)庫1)Master數(shù)據(jù)庫2)Model數(shù)據(jù)庫3)Msdb數(shù)據(jù)庫4)Tempdb數(shù)據(jù)庫2.?dāng)?shù)據(jù)庫快照數(shù)據(jù)庫快照是源數(shù)據(jù)庫的只讀、靜態(tài)視圖。4.1數(shù)據(jù)庫的創(chuàng)建與管理

4.1.2數(shù)據(jù)庫的創(chuàng)建1.準(zhǔn)備創(chuàng)建數(shù)據(jù)庫1)確定數(shù)據(jù)庫的名稱、所有者(創(chuàng)建數(shù)據(jù)庫的用戶)數(shù)據(jù)庫名稱:studentcourse2)確定存儲該數(shù)據(jù)庫的數(shù)據(jù)文件的大小及文件空間增長方式,確定關(guān)系、索引,及系統(tǒng)存儲參數(shù)的配置,確定數(shù)據(jù)庫的存取方法.主數(shù)據(jù)文件:邏輯名稱studentcourse;物理文件名:C:\Data\studentcourse.mdf,初始大?。?MB,最大空間:UNLIMITED,空間增加量:1MB,屬于文件組primary。次數(shù)據(jù)文件:邏輯名稱secondsc;物理文件名:C:\mydb\secondsc.ndf,初始大?。?MB,最大空間:50MB,空間增加量:1MB,屬于文件組group1。日志文件:邏輯名稱studentcourse_log;物理文件名:C:\Log\studentcourse_log.ldf,始初大?。?MB,最大空間:20MB,空間增加量:10%索引:每一數(shù)據(jù)表關(guān)于主關(guān)鍵字建立索引文件。2.使用SQLServerManagementStudio創(chuàng)建數(shù)據(jù)庫3.1關(guān)系數(shù)據(jù)庫設(shè)計(jì)思路圖4.1【創(chuàng)建數(shù)據(jù)庫】界面圖4.2【新建數(shù)據(jù)庫】對話框3.使用Transact-SQL語言創(chuàng)建數(shù)據(jù)庫1)命令格式CREATEDATABASE<數(shù)據(jù)庫名>[ON[PRIMARY][<Filespec>[,…N]][,<Filegroupspec>[,…N]]][LOGON{<Filespec>[,…N]}]

其中,[<Filespec>[,…N]]表示設(shè)置文件屬性,格式如下。

([NAME=邏輯文件名,]FILENAME=‘物理文件名稱’

[,SIZE=數(shù)據(jù)庫文件的初始容量值][,MAXSIZE={物理文件的最大容量值|UNLIMITED}][,F(xiàn)ILEGROWTH=增加容量值])[,…N]其中[<Filegroupspec>[,…N]]表示設(shè)置文件組屬性,格式如下。FILEGROUP文件組名稱[DEFAULT]<Filespec>[,…N]2)參數(shù)說明

(1)放在“[]”中的“<>”表示整個“[]”括起來的選項(xiàng)都可省略,如果不省,則“<>”

括起的選項(xiàng)不能省。使用“|”分隔的多個選項(xiàng),表示只能選擇其中一個。(2)數(shù)據(jù)庫的名稱必須符合標(biāo)識符規(guī)則,最長為128個字符。數(shù)據(jù)庫名稱在SQLServer的實(shí)例中必須唯一。數(shù)據(jù)庫的邏輯文件名是數(shù)據(jù)庫在SQLServer中的標(biāo)識符。FILENAME指定數(shù)據(jù)庫物理文件名稱和路徑,它和數(shù)據(jù)庫邏輯名稱一一對應(yīng)。文件組的邏輯名稱必須在數(shù)據(jù)庫中唯一,不能是系統(tǒng)提供的名稱PRIMARY和PRIMARY_LOG。(3)“ON”定義數(shù)據(jù)文件;“PRIMARY”定義主文件組中的文件;“LOGON”定義日志文件。一個數(shù)據(jù)庫只能有一個主文件,如果沒有定義主文件,列在數(shù)據(jù)文件項(xiàng)的第一個文件就是主文件。(4)數(shù)據(jù)庫文件容量單位可以是KB,MB,GB,TB,缺省值為MB,長度必須為整數(shù),主文件的,最小容量是Model數(shù)據(jù)庫的主文件長度;對于其他類型文件,最小長度為512KB。(5)MAXSIZE:指定物理文件的最大容量。如果不設(shè)置文件的最大尺寸,那么文件的增長最大值將是磁盤的所有空間。UNLIMITED選項(xiàng)允許文件增長到磁盤已滿。(6)FILEGROWTH:指定文件每次增加容量的大小或百分比,當(dāng)FILEGROWTH=0時,表示文件不增長。(7)DEFAULT:指定命名文件組為數(shù)據(jù)庫中的默認(rèn)文件組。3.使用Transact-SQL語言創(chuàng)建數(shù)據(jù)庫CREATEDATABASE

studentcourse--邏輯數(shù)據(jù)名稱:studentcourseONPRIMARY--ON子句指出文件屬于PRIMARY組

(NAME=‘studentcourse’,--NAME指出了對應(yīng)的邏輯文件名

FILENAME=‘C:\DATA\studentcourse.mdf’,--FILENAME指出物理文件名

SIZE=8MB,--Size指出了初始分配空間

MAXSIZE=UNLIMITED,--MAXSIZE指出了最大空間

FILEGROWTH=1024KB),--FILEGROWTH指出了文件空間的增長量

FILEGROUP[group1]--FILEGROUP子句指出次數(shù)據(jù)文件.NDF(NAME=N'secondsc',FILENAME=N'C:\mydb\secondsc.ndf',SIZE=5120KB,MAXSIZE=51200KB,FILEGROWTH=1024KB)LOGON--LOGON子句指出新建數(shù)據(jù)庫的日志文件.LDF(NAME=N'studentcourse_log',FILENAME='C:\LOG\studentcourse_log.ldf',SIZE=4096KB,MAXSIZE=20480KB,FILEGROWTH=10%)3)創(chuàng)建學(xué)生選課數(shù)據(jù)庫4.1.3管理數(shù)據(jù)庫1.查看數(shù)據(jù)庫信息1)命令格式EXECsp_helpdb[數(shù)據(jù)庫名]2)功能查看指定數(shù)據(jù)庫的相關(guān)數(shù)據(jù)文件信息、數(shù)據(jù)庫擁有者、創(chuàng)建時間等信息。若缺省數(shù)據(jù)庫名,則顯示所有數(shù)據(jù)庫信息。【例4.1】查看學(xué)生選課“studentcourse”數(shù)據(jù)庫的信息。方法一:使用SQLServerManagementStudio查看數(shù)據(jù)庫信息方法二:使用系統(tǒng)存儲過程命令查看數(shù)據(jù)庫信息。EXECsp_helpdbstudentcourse【例4.2】查看所有數(shù)據(jù)庫信息。EXECsp_helpdb4.1.3管理數(shù)據(jù)庫2.打開數(shù)據(jù)庫1)命令格式USE<數(shù)據(jù)庫名>2)功能使指定數(shù)據(jù)庫成為當(dāng)前數(shù)據(jù)庫【例4.3】打開學(xué)生選課“studentcourse”數(shù)據(jù)庫。方法一:使用SQLServerManagementStudio打開數(shù)據(jù)庫方法二:使用命令。USEstudentcourse3.修改數(shù)據(jù)庫1)命令格式AlterDatabase數(shù)據(jù)庫名{Add

File<Filespec>[,…N][ToFilegroup文件組名稱]|AddLogFile<Filespec>[,…N]|RemoveFile邏輯文件名稱[WithDelete]|ModifyFile<Filespec>|ModifyName=新數(shù)據(jù)庫名稱|AddFilegroup新增文件組名稱|RemoveFilegroup文件組名稱|ModifyFilegroup原文件組名稱{文件組屬性|Name=新文件組名稱}}2)功能AddFile:向數(shù)據(jù)庫添加文件。AddLogfile:向數(shù)據(jù)庫添加日志文件。RemoveFile:從數(shù)據(jù)庫中刪除文件。ModifyFile:對文件進(jìn)行修改,包括SIZE、FILEGROWTH和MAXSIZE,每次只能對一個屬性進(jìn)行修改。ModifyName:重新命名數(shù)據(jù)庫。Add|Remove|

ModifyFilegroup:向數(shù)據(jù)庫中添加刪除修改文件組【例4.4】向數(shù)據(jù)庫Studentcourse中添加一個名為group2的文件組,并在該文件組中添加一個名為Studentcourse2、路徑為默認(rèn)的次數(shù)據(jù)文件,初始值大小為5MB,最大值為50MB,文件以1MB增長;再添加一個名為Studentcourse_Log2的日志文件,初始值大小為8MB,最大值為100MB,文件以10%增長。然后對數(shù)據(jù)庫中Studentcourse2文件重命名為Studentcourse_2,最后把該文件從數(shù)據(jù)庫中移除。方法一:使用SQLServerManagementStudio方法二:使用SQL語言修改數(shù)據(jù)庫。命令如下所示:alterDATABASEstudentcourseaddfilegroupgroup2--新增group2文件組GO3.修改數(shù)據(jù)庫4.1.3管理數(shù)據(jù)庫4.1.3管理數(shù)據(jù)庫alterDATABASEstudentcourseaddfile(NAME=‘studentcourse2’,--在文件組group2中新增studentcourse2次數(shù)據(jù)文件FILENAME='C:\ProgramFiles\MicrosoftSQLServer\MSSQL.1\MSSQL\DATA\studentcourse2.ndf',SIZE=5MB,MAXSIZE=50MB,FILEGROWTH=1MB)tofilegroupgroup2GoalterDATABASEstudentcoursemodifyfile--修改studentcourse主數(shù)據(jù)文件的文件增長為2MB(NAME='studentcourse',FILEGROWTH=2MB)GoalterDATABASEstudentcourseaddLOGfile--新增studentcourse_log2日志文件(NAME=N'studentcourse_log2',FILENAME='C:\ProgramFiles\MicrosoftSQLServer\MSSQL.1\MSSQL\DATA\studentcourse_log2.ldf',SIZE=8MB,MAXSIZE=100MB,FILEGROWTH=10%)GoalterDATABASEstudentcoursemodifyfile(name='studentcourse2',newname='studentcourse_2')--對數(shù)據(jù)庫中studentcourse2次數(shù)據(jù)文件重命名成studentcourse_2GoalterDATABASEstudentcourseremovefilestudentcourse_2--從數(shù)據(jù)庫中移除studentcourse_2次要數(shù)據(jù)文件4.刪除數(shù)據(jù)庫1) 命令格式

DROPDATABASE<數(shù)據(jù)庫名>[,…,N]

2) 功能刪除指定數(shù)據(jù)庫?!纠?.5】

刪除學(xué)生選課數(shù)據(jù)庫studentcourse。方法一:使用SQLServerManagementStudio刪除數(shù)據(jù)庫。方法二:使用SQL命令刪除數(shù)據(jù)庫。DROPDATABASEstudentcourse1)命令格式DBCCSHRINKDATABASE(數(shù)據(jù)庫名[,Target_Percent])[{Notruncate|Truncateonly}]2)功能壓縮指定數(shù)據(jù)庫?!纠?.6】壓縮學(xué)生選課studentcourse數(shù)據(jù)庫,使其最大可用空間為30%。方法一:使用SQLServerManagementStudio壓縮數(shù)據(jù)庫方法二:使用SQL命令壓縮數(shù)據(jù)庫DBCCSHRINKDATABASE(Studentcourse,30)4.1.3管理數(shù)據(jù)庫5.壓縮數(shù)據(jù)庫4.1.3管理數(shù)據(jù)庫【例4.7】壓縮學(xué)生選課數(shù)據(jù)庫studentcourse中的一個secondsc次數(shù)據(jù)文件,將其壓縮為2MB。方法一:使用SQLServerManagementStudio方法二:使用SQL命令。DBCCSHRINKFILE(secondsc,2)5.壓縮數(shù)據(jù)庫4.2.1數(shù)據(jù)系統(tǒng)視圖1.Sysobjects系統(tǒng)視圖2.Syscolumns系統(tǒng)視圖3.Sysindexes系統(tǒng)視圖4.Sysusers系統(tǒng)視圖5.Sysdatabases系統(tǒng)視圖6.Sysdepends系統(tǒng)視圖7.Sysconstraints系統(tǒng)視圖4.2數(shù)據(jù)表的創(chuàng)建SQLServer2019將系統(tǒng)數(shù)據(jù)存儲在隱藏“資源”表中。只有通過具有權(quán)限的管理員連接,方可調(diào)用和查看。低級用戶必須使用系統(tǒng)視圖,從隱藏表和隱藏函數(shù)中獲得系統(tǒng)信息。4.2.1數(shù)據(jù)系統(tǒng)視圖4.2數(shù)據(jù)表的創(chuàng)建【例4.8】

使用系統(tǒng)視圖sysdatabases顯示所有已經(jīng)安裝的數(shù)據(jù)庫名稱。操作步驟如下。在SQLServerManagementStudio主窗口中,單擊“新建查詢”按鈕,在新建查詢命令窗口輸入如下命令。

useMASTERSELECTname,filenameFROMsysdatabases4.2.1數(shù)據(jù)系統(tǒng)視圖4.2數(shù)據(jù)表的創(chuàng)建【例4.9】

使用系統(tǒng)視圖sysobjects顯示studentcourse數(shù)據(jù)庫中由用戶定義的對象。操作步驟如下。在SQLServerManagementStudio主窗口中,單擊“新建查詢”按鈕,在新建查詢命令窗口輸入如下命令。

usestudentcourseSELECTname,typeFROMsysobjectsWHEREtype='u'1.?dāng)?shù)據(jù)類型及其確定原則2.SQLServer的九大類數(shù)據(jù)類型1)整型數(shù)據(jù)類型(Integer)2)精確數(shù)字?jǐn)?shù)據(jù)類型(ExactNumeric)3)近似數(shù)字?jǐn)?shù)據(jù)類型(ApproximateNumeric)4)貨幣數(shù)據(jù)類型(Monetary)5)日期和時間數(shù)據(jù)類型(DateTime)6)字符數(shù)據(jù)類型(Character)7)二進(jìn)制數(shù)據(jù)類型8)專用數(shù)據(jù)類型9)自定義數(shù)據(jù)類型(UDT)EXEC4.2.2數(shù)據(jù)類型4.2.2數(shù)據(jù)類型數(shù)據(jù)類型存儲字節(jié)數(shù)取值范圍使用說明Bigint8-263~263-1即-9,223,372,036,854,775,808~9,223,372,036,854,775,807存儲非常大的正負(fù)整數(shù)Int4-231~231-1即-2,147,483,648~2,147,483,647存儲正負(fù)整數(shù)Smallint2-215~215-1即-32,768~32,767存儲正負(fù)整數(shù)Tinyint10~27-1即0~255存儲小范圍的正整數(shù)表4.2整型數(shù)據(jù)類型4.2.2數(shù)據(jù)類型數(shù)據(jù)類型存儲字節(jié)數(shù)取值范圍使用說明Decimal(P,S)依據(jù)不同的精度,需要5~17字節(jié)-1038+1~1038-1P的默認(rèn)值為18,最大可以存儲38位十進(jìn)制數(shù);S的默認(rèn)值是0,只能取0~P之間的值。例如,3.14的數(shù)據(jù)類型指定為Decimal(3,2)Numeric(P,S)依據(jù)不同的精度,需要5~17字節(jié)-1038+1~1038-1功能上等價(jià)于Decimal,并可以與Decimal交換使用表4.3精確數(shù)字?jǐn)?shù)據(jù)類型4.2.2數(shù)據(jù)類型數(shù)據(jù)類型存儲字節(jié)數(shù)取值范圍使用說明Float或

Float(N)4或8-1.79E+308~-2.23E-308、0、2.23E-308~1.79E+308存儲大型浮點(diǎn)數(shù),超過十進(jìn)制數(shù)據(jù)類型的容量,默認(rèn)精確到第15位數(shù)(當(dāng)N取1~24時相當(dāng)于REAL類型,4個字節(jié)存儲;取24~53則8個字節(jié))Real4-3.4E+38~-1.18E-38、0、1.18E-38~3.4E+38仍然有效,但為了滿足SQL-92標(biāo)準(zhǔn),已經(jīng)被Float替換了,精確到第7位數(shù)表4.4近似數(shù)字?jǐn)?shù)據(jù)類型4.2.2數(shù)據(jù)類型表4.5貨幣數(shù)據(jù)類型(Monetary)數(shù)據(jù)類型存儲字節(jié)數(shù)取值范圍使用說明Money8字節(jié)-263~263-1即-922

337

203

685

477.5808~922

337

203

685

477.5807存儲大型貨幣值,精確到小數(shù)點(diǎn)后4位,精確至萬分之一Smallmoney4字節(jié)-231~231-1即-214

748.3648~214

748.3647存儲小型貨幣值,精確到小數(shù)點(diǎn)后4位4.2.2數(shù)據(jù)類型表4.6日期和時間數(shù)據(jù)類型數(shù)據(jù)類型存儲

字節(jié)數(shù)取值范圍使用說明Datetime8從1753年1月1日到9999年12月31日,精確度為3.33毫秒存儲大型日期和時間值Smalldatetime4從1900年1月1日到2079年6月6日,精確度為1分鐘存儲較小范圍的日期和時間值4.2.2數(shù)據(jù)類型表4.7字符數(shù)據(jù)類型數(shù)據(jù)類型存儲字節(jié)數(shù)取值范圍使用說明Char(N)N字節(jié)1~8000固定寬度的ANSI數(shù)據(jù)類型Varchar(N)輸入的字符個數(shù)為實(shí)際長度(0~N字節(jié))1~8000可變寬度的ANSI數(shù)據(jù)類型Varchar(Max)最大長度為2GB,輸入的字符個數(shù)為實(shí)際長度(0~N字節(jié))1~231-1,即1~2G,即1~214

748

3647可變寬度的ANSI數(shù)據(jù)類型Text最大長度為2GB個字節(jié)1~231-1,即1~2G,即1~214

748

3647固定寬度的ANSI數(shù)據(jù)類型,已由VARCHAR(MAX)取代4.2.2數(shù)據(jù)類型表4.8二進(jìn)制數(shù)據(jù)類型數(shù)據(jù)類型存儲字節(jié)數(shù)取值范圍使用說明Binary(N)占N字節(jié)空間,N可以取從1到8000的值。-263~263-1存儲固定大小的二進(jìn)制數(shù)據(jù),在輸入數(shù)據(jù)時必須在數(shù)據(jù)前加上字符“0X”作為二進(jìn)制標(biāo)識Varbinary(N)占實(shí)際長度+2字節(jié),N可以取從1到8000的值。-263~263-1存儲可變大小的二進(jìn)制數(shù)據(jù),若不指定N的值,則默認(rèn)為1Image最大長度231-10~231-10~2GB存儲可變大小的二進(jìn)制數(shù)據(jù),在輸入數(shù)據(jù)時必須在數(shù)據(jù)前加上字符“0X”作為二進(jìn)制標(biāo)識4.2.2數(shù)據(jù)類型表4.9特殊數(shù)據(jù)類型數(shù)據(jù)類型存儲字節(jié)數(shù)取值范圍使用說明Bit10,1,Null存儲0、1或Null。用于基本“標(biāo)記”值。TRUE被轉(zhuǎn)換為1,而FALSE被轉(zhuǎn)換為0,輸入0和1之外的任何值,系統(tǒng)都會作為1來處理Timestamp8二進(jìn)制的字符串可自動生成二進(jìn)制數(shù)字的數(shù)據(jù)類型,并在插入或修改行時被設(shè)置到數(shù)據(jù)庫時間戳,每當(dāng)行中的某個日期發(fā)生變化時,該行上的TIMESTAMP型列中的值就自動更新。適合用來檢測在一個用戶處理數(shù)據(jù)期間另一個用戶是否已修改了該數(shù)據(jù)Sql_Variant0~8016

通配符數(shù)據(jù)類型,它會自動地將自己“轉(zhuǎn)換為”寫到它里面的數(shù)據(jù)的類型。最多存儲8000個字節(jié),能保存除VARCHAR(MAX),NVARCHAR(MAX),TEXT,NTEXT,IMAGE,TIMESTAMP和SQL_VARIANT以外的任何其他合法的SQL數(shù)據(jù)類型4.2.2數(shù)據(jù)類型自定義數(shù)據(jù)類型T-SQL的自定義數(shù)據(jù)類型是基于SQLServer2019中的系統(tǒng)數(shù)據(jù)類型,可用作一種別名機(jī)制。(1) 命令格式

EXECSP_ADDTYPE{新數(shù)據(jù)類型名稱},[,系統(tǒng)原有數(shù)據(jù)類型名稱][,NULL|NOTNULL]

(2) 功能

是指定系統(tǒng)原有的數(shù)據(jù)類型為新數(shù)據(jù)類型。如果指定“NULL”選項(xiàng),則表示新定義的數(shù)據(jù)類型允許輸入空值。如果未明確定義為空性,系統(tǒng)將基于數(shù)據(jù)庫或連接的ANSINULL默認(rèn)設(shè)置進(jìn)行指定?!纠?.10】建一個以Datetime為基礎(chǔ)的出生日期(Birthday)可為空的數(shù)據(jù)類型。方法一:使用SQLServerManagementStudio方法二:使用SQL命令。EXECSP_ADDTYPEBirthday,Datetime,Null4.2.2數(shù)據(jù)類型4.2.3創(chuàng)建數(shù)據(jù)表結(jié)構(gòu)1.熟悉CREATETABLE語句的格式1)CREATETABLE語句的簡化格式CREATETABLE[{服務(wù)器名.[數(shù)據(jù)庫名].[架構(gòu)名].|數(shù)據(jù)庫名.[架構(gòu)名].|架構(gòu)名.}]數(shù)據(jù)庫表名(列名,數(shù)據(jù)類型[NOTNULL][identity(初值,步長)][DEFAULT默認(rèn)值][UNIQUE][PRIMARYKEY][CLUSTERED|NONCLUSTERED][,列名,數(shù)據(jù)類型[NOTNULL][DEFAULT默認(rèn)值][UNIQUE][,…n]][,列名AS計(jì)算列值的表達(dá)式[,…n]][,[CONSTRAINT主鍵約束名]PRIMARYKEY(屬性名)][,[CONSTRAINT檢查約束名]CHECK(邏輯表達(dá)式)[,n]][,[FOREIGNKEY(外鍵屬性)REFERENCES參照表(參照屬性)[,…n]])[ON{文件組|默認(rèn)文件組}]2)CREATETABLE語句的說明【例4.11】創(chuàng)建數(shù)據(jù)庫“book_shop”的數(shù)據(jù)表book,數(shù)據(jù)表由書號、書名、出版社、出版日期、單價(jià)、數(shù)量、總價(jià)(單價(jià)*數(shù)量)、電子郵件地址和數(shù)據(jù)庫表使用者字段組成。其中書號列定義為主鍵并且為系統(tǒng)自動編號即標(biāo)識列,種子值(起始值)為1000,增量為1,要求出版社字段的值只能是高教、浙大、電子和中央四個之一,電子郵件地址字段中必須包含@符號,單價(jià)必須大于0,數(shù)量必須大于等于0,出版日期的默認(rèn)值設(shè)置為當(dāng)前日期函數(shù)。(1)標(biāo)識IDENTITY屬性(2)計(jì)算所得的列(3)空值NULL約束(4)PRIMARYKEY約束(5)UNIQUE約束(6)DEFAULT約束(7)CHECK約束(8)FOREIGNKEY約束2)CREATETABLE語句的說明(1)標(biāo)識IDENTITY屬性

定義列時,還可以為一個表中的其中一列指定一個特殊的自動增長標(biāo)識屬性。每一個表只能有一個“標(biāo)識”屬性,標(biāo)識屬性有兩個參數(shù):標(biāo)識初始值和增量。例如:設(shè)置book表中屬性“書號”為標(biāo)識列。

CREATETABLEbook(……

書號intidentity(1000,1)NOTFORREPLICATION,

……)2)CREATETABLE語句的說明(2)計(jì)算所得的列

我們還可以創(chuàng)建一種稱為計(jì)算所得的列的特殊列,它包含一個涉及表中一個或多個其他列的計(jì)算公式。

例如:設(shè)置book表中屬性“總價(jià)”為計(jì)算所得的列。

CREATETABLEbook(……

總價(jià)as單價(jià)*數(shù)量,

數(shù)據(jù)庫表使用者ASUSER_NAME(),

……)2)CREATETABLE語句的說明(3)空值NULL約束

空值NULL約束決定屬性值是否允許為空值(NULL)。NULL表示沒有輸入任何內(nèi)容,它不是零或空白。timestamp數(shù)據(jù)類型只能定義為NOTNULL。例如:設(shè)置book表中屬性“書名”不允許為空值。

CREATETABLEbook(……

書名char(20)NOTNULL,

……)2)CREATETABLE語句的說明(4)PRIMARYKEY約束設(shè)置為PRIMARY約束的屬性集就是表的主鍵。由PRIMARYKEY約束生成的索引不能使表中的非聚集索引超過249個,聚集索引超過1個。例如:建立book表中屬性“書號”為主鍵的聚集索引。

CREATETABLEbook(……

書號intCONSTRAINTPK_snoPRIMARYKEYCLUSTERED,

……)2)CREATETABLE語句的說明(4)PRIMARYKEY約束或者

CREATETABLEbook(……

書號int,CONSTRAINTPK_snoPRIMARYKEYCLUSTERED(書號)

……)2)CREATETABLE語句的說明(5)UNIQUE約束UNIQUE約束相應(yīng)屬性列的取值必須唯一,允許存在空值。如果UNIQUE約束中沒有指定CLUSTERED或NONCLUSTERED,則默認(rèn)為NONCLUSTERED。每個UNIQUE約束都生成一個索引。例如:對book表中的屬性“書名”建立唯一性約束。CREATETABLEbook(……

書名char(20)UNIQUE,

……)2)CREATETABLE語句的說明(5)UNIQUE約束也可以在定義UNIQUE約束時,提供約束名稱。

CREATETABLEbook(……

書名char(20),CONSTRAINTU_snUNIQUE(書名)

……)2)CREATETABLE語句的說明(6)DEFAULT約束

每個屬性只能有一個默認(rèn)值??梢园A恐?、函數(shù)或NULL,但不能引用表中的其他列。數(shù)據(jù)類型為timestamp或具有IDENTITY屬性的列上不能定義默認(rèn)值。使用INSERT和UPDATE語句時,自動提供默認(rèn)值。例如:設(shè)置

“出版日期”的默認(rèn)值為當(dāng)前日期。

CREATETABLEbook(……

出版日期datetimeDEFAULT(getdate())

……)2)CREATETABLE語句的說明(7)CHECK約束

每個屬性列可以有多個CHECK約束,約束條件是邏輯表達(dá)式,不能引用其他表。當(dāng)執(zhí)行INSERT和DELETE語句時,將檢查數(shù)據(jù)是否滿足約束。例如:約束屬性“出版社”只能取值為高教、浙大、電子、中央四個之一,電子郵件地址字段中必須包含@符號,單價(jià)必須大于0,數(shù)量必須大于等于0。

CREATETABLEbook(……

出版社char(20),

單價(jià)smallintcheck(單價(jià)>0),

數(shù)量smallintcheck(數(shù)量>=0),

電子郵件地址varchar(25)check(電子郵件地址like'%@%'),check(出版社in('高教','浙大','電子','中央')

……)2)CREATETABLE語句的說明(8)FOREIGNKEY約束FOREIGNKEY(外鍵)約束可以確保一個特定的列(外鍵)中可以輸入的值存在于一個指定的表的指定列(被參照列)中。例如:學(xué)生選課數(shù)據(jù)表SC(如表3.5所示)中的屬性“課程號”參照課程數(shù)據(jù)表C(如表3.4所示)中的屬性“課程號”的值,則SC為外鍵表,“SC.課程號”為外鍵,C表為主鍵表,“C.課程號”是主鍵。命令如下:

CREATETABLESC(

課程號char(3),FOREIGNKEY(課程號)REFERENCESC(課程號))方法一:使用SQLServerManagementStudio方法二:使用命令。CREATEdatabasebookshopgoCREATETABLEbook(書號intidentity(1000,1)NOTFORREPLICATIONPRIMARYKEYCLUSTERED,

書名char(20)notnull,

出版社char(20),

出版日期datetimeDEFAULT(getdate()),

單價(jià)smallintcheck(單價(jià)>0),

數(shù)量smallintcheck(數(shù)量>=0),

總價(jià)as單價(jià)*數(shù)量,

電子郵件地址varchar(25),

數(shù)據(jù)庫表使用者ASUSER_NAME(),check(電子郵件地址like'%@%'),check(出版社in('高教','浙大','電子','中央')))2)CREATETABLE語句的說明【例4.12】創(chuàng)建數(shù)據(jù)庫學(xué)生選課“studentcourse”的數(shù)據(jù)表S、C、SC,數(shù)據(jù)表結(jié)構(gòu)如表3.6,表3.7,表3.8所示,各表的完整性約束如表3.9,表3.10,表3.11所示。方法一:使用SQLServerManagementStudio創(chuàng)建數(shù)據(jù)表方法二:使用SQL命令。1)創(chuàng)建課程表C的語句如下:CREATETABLEC(

課程號Char(3)NOTNULL,

課程名Varchar(20)NOTNULL,

學(xué)分SmallintNULL,

預(yù)選課程號Char(3)NULL,

教師Char(8)NULL, CONSTRAINTFK_PcnoFOREIGNKEY(預(yù)選課程號)REFERENCESC(課程號), CONSTRAINTCK_CnoCHECK(課程號Like'[A-C][0-9][0-9]'), CONSTRAINTPK_CPRIMARYKEYCLUSTERED(課程號ASC) )ON[PRIMARY]2)CREATETABLE語句的說明【例4.12】創(chuàng)建數(shù)據(jù)庫學(xué)生選課“studentcourse”的數(shù)據(jù)表S、C、SC,數(shù)據(jù)表結(jié)構(gòu)如表3.6,表3.7,表3.8所示方法二:使用SQL命令。2)創(chuàng)建學(xué)生基本信息表S的語句如下:CREATETABLES(

學(xué)號Char(6)NOTNULLCONSTRAINTDF_S_學(xué)號DEFAULT('J04000'),

姓名Char(8)NOTNULL,

性別Char(2)NOTNULL,

出生日期DatetimeNOTNULLCONSTRAINTDF_S_出生日期DEFAULT('19800101'),

系Varchar(20)NOTNULL,

電話Char(8)NULL,CONSTRAINTCK_SCHECK(學(xué)號Like'[A-Z][0-9][0-9][0-9][0-9][0-9]'),CONSTRAINTCK_SexCHECK(性別='女'OR性別='男'),CONSTRAINTCK_TELCHECK(電話Like'[0-9][0-9][0-9]-[0-9][0-9][0-9][0-9]'),CONSTRAINTPK_SPRIMARYKEYCLUSTERED(學(xué)號ASC) )ON[PRIMARY]

2)CREATETABLE語句的說明【例4.12】創(chuàng)建數(shù)據(jù)庫學(xué)生選課“studentcourse”的數(shù)據(jù)表S、C、SC,數(shù)據(jù)表結(jié)構(gòu)如表3.6,表3.7,表3.8所示,各表的完整性約束如表3.9,表3.10,表3.11所示。方法二:使用SQL命令。3)創(chuàng)建學(xué)生選課數(shù)據(jù)表SC的語句如下:CREATETABLESC(

學(xué)號Char(6)NOTNULL,

課程號Char(3)NOTNULL,

成績SmallintNULL, CONSTRAINTFK_C_CNOFOREIGNKEY(課程號)REFERENCESC(課程號), CONSTRAINTFK_S_SNOFOREIGNKEY(學(xué)號)REFERENCESS(學(xué)號), CONSTRAINTCK_GradeCHECK(成績>=0AND成績<=100OR成績ISNULL), CONSTRAINTPK_SCPRIMARYKEYCLUSTERED(學(xué)號ASC, 課程號ASC) )ON[PRIMARY]2)CREATETABLE語句的說明【例4.13】返回有關(guān)所有對象的信息。USEMaster;GOEXECSp_Help;GO【例4.14】返回學(xué)生選課“studentcourse”中學(xué)生表的信息。USEStudentcourseGOEXECSp_Helps4.2.4查看數(shù)據(jù)表1.修改表的結(jié)構(gòu)1)命令格式ALTERTABLE<數(shù)據(jù)表名>

{ALTERCOLUMN<屬性列名>類型(寬度)[NULL|NOTNULL]

|ADD<屬性列名>類型(寬度)[NULL|NOTNULL][完整性約束][,…n]

|DROPCOLUMN[<屬性列名>][,…n]

|ADD[CONSTRAINT<約束名>]CHECK(邏輯表達(dá)式)[,…n]}

|DROP[CONSTRAINT<約束名>|ALL][,…n]}2)功能ALTERTABLE:將要修改的當(dāng)前數(shù)據(jù)庫中的指定數(shù)據(jù)表的表名。ALTERCOLUMN:修改當(dāng)前數(shù)據(jù)庫中的指定數(shù)據(jù)表的指定屬性。ADD:向當(dāng)前數(shù)據(jù)庫中的指定數(shù)據(jù)表增加指定屬性或列級完整性約束。DROPCOLUMN:刪除當(dāng)前數(shù)據(jù)庫中的指定數(shù)據(jù)表中的指定屬性。DROP:刪除當(dāng)前數(shù)據(jù)庫中的指定數(shù)據(jù)表中的指定列級完整性約束。4.2.5修改數(shù)據(jù)表【例4.15】修改當(dāng)前數(shù)據(jù)庫“studentcourse”中S表的系屬性改成char(25),增加一個入學(xué)時間字段,它的數(shù)據(jù)類型為datetime,默認(rèn)值為getdate(),最后刪除入學(xué)時間字段。方法一:使用SQLServerManagementStudio方法二:使用命令。ALTERTABLEsALTERCOLUMN

系char(25)GoALTERTABLEsADD入學(xué)時間datetimeGoALTERTABLEsADDCONSTRAINTDF_sjDEFAULT(getdate())for入學(xué)時間4.2.5修改數(shù)據(jù)表【例4.15】修改當(dāng)前數(shù)據(jù)庫“studentcourse”中S表的系屬性改成char(25),增加一個入學(xué)時間字段,它的數(shù)據(jù)類型為datetime,默認(rèn)值為getdate(),最后刪除入學(xué)時間字段。也可以將增加入學(xué)時間字段與默認(rèn)值進(jìn)行一次性設(shè)置,操作如下:

ALTERTABLESADD入學(xué)時間datetimeCONSTRAINTDF_sjDEFAULT(getdate());GoALTERTABLESDROPDF_sj

--從當(dāng)前數(shù)據(jù)庫的S表中刪除DF_SJ默認(rèn)值約束goALTERTABLESDROPCOLUMN入學(xué)時間

--從當(dāng)前數(shù)據(jù)庫的S表中刪除入學(xué)時間字段4.2.5修改數(shù)據(jù)表2.修改表的名稱1)命令格式

Sp_rename<原數(shù)據(jù)表名>,<新數(shù)據(jù)表名>2)功能重命名當(dāng)前數(shù)據(jù)庫中的指定數(shù)據(jù)表名?!纠?.16】重命名數(shù)據(jù)庫bookshop的數(shù)據(jù)表book名稱,改為“書籍資料”。方法一:使用SQLServerManagementStudio方法二:使用SQL命令。Sp_rename'book','書籍資料'

4.2.5修改數(shù)據(jù)表1)命令格式DROPTABLE表名2)功能刪除表【例4.17】刪除當(dāng)前數(shù)據(jù)庫中的表S。

方法一:使用SQLServerManagementStudio方法二:使用SQL命令。DROPTABLES4.2.6刪除數(shù)據(jù)表【例4.18】刪除其他數(shù)據(jù)庫中的表。例如,刪除studentcourse數(shù)據(jù)庫中的S表。DROPTABLEStudentcourse.Dbo.s4.2.7外部表

SQLServer的外部表(ExternaltableforSQLServer)是SQLServer2016版本新增的內(nèi)容,以前版本訪問外部數(shù)據(jù)源使用的是鏈接服務(wù)器,SQLServer2019可以配置PolyBase訪問Hadoop、AzureBlobStorage、SQLServer、Oracle、Teradata、MongoDB和基于ODBC的源等。PolyBase允許你將來自SQLServer實(shí)例的數(shù)據(jù)與外部數(shù)據(jù)連接起來。當(dāng)然需要安裝PolyBase查詢服務(wù)。SQLServer2019Preview中的PolyBase允許訪問各種數(shù)據(jù)源,AzureDataStudioSQLServer2019Preview擴(kuò)展當(dāng)前支持SQLServer和Oracle數(shù)據(jù)僅從“外部表”向?qū)Й@取源。SQLServer的外部表(ExternaltableforSQLServer)是SQLServer2016版本新增的內(nèi)容,以前版本訪問外部數(shù)據(jù)源使用的是鏈接服務(wù)器,SQLServer2019可以配置PolyBase訪問Hadoop、AzureBlobStorage、SQLServer、Oracle、Teradata、MongoDB和基于ODBC的源等。PolyBase允許你將來自SQLServer實(shí)例的數(shù)據(jù)與外部數(shù)據(jù)連接起來。當(dāng)然需要安裝PolyBase查詢服務(wù)。SQLServer2019Preview中的PolyBase允許訪問各種數(shù)據(jù)源,AzureDataStudioSQLServer2019Preview擴(kuò)展當(dāng)前支持SQLServer和Oracle數(shù)據(jù)僅從“外部表”向?qū)Й@取源。4.2.7外部表

4.2.7外部表

1.命令格式CREATEEXTERNALTABLE{數(shù)據(jù)庫名.架構(gòu)名.表名|架構(gòu)名.表名|表名}(<列名<數(shù)據(jù)類型>[COLLATEcollation_name][NULL|NOTNULL]>[,...n])WITH(LOCATION='實(shí)際數(shù)據(jù)指定文件夾或文件路徑和文件名',DATA_SOURCE=外部數(shù)據(jù)源名,FILE_FORMAT=external_file_format_name[,<|REJECT_TYPE=value|percentage|REJECT_VALUE=reject_value|REJECT_SAMPLE_VALUE=reject_sample_value,|REJECTED_ROW_LOCATION='/目錄位置'>[,...n]])[;]4.2.7外部表

(1)外部表,是存儲在數(shù)據(jù)庫外面的表。用來存取數(shù)據(jù)庫以外的文本文件(TextFile)或SQLSERVER專屬格式文件。只有與表相關(guān)的定義放在數(shù)據(jù)字典中。當(dāng)存取時才能從SQLServer專屬格式文件中取得數(shù)據(jù),外部表僅供查詢,不能對外部表的內(nèi)容進(jìn)行修改(INSERT、UPDATE、DELETE操作)。不能對外部表建立索引。位于文件系統(tǒng)之中(一定要在數(shù)據(jù)庫服務(wù)器中,而不是其它網(wǎng)絡(luò)路徑),按一定格式分割,例如@#$等,文本文件或者其他類型的文件可以作為外部表。(遠(yuǎn)程文件不行)

僅存儲表元數(shù)據(jù)以及有關(guān)Hadoop或Azureblob存儲中引用的文件或文件夾的基本統(tǒng)計(jì)信息。2.功能4.2.7外部表

(2)對外部表的訪問可以通過SQL語句來完成,而不需要先將外部表中的數(shù)據(jù)裝載進(jìn)數(shù)據(jù)庫中。數(shù)據(jù)在數(shù)據(jù)庫的外部組織,是操作系統(tǒng)文件。操作系統(tǒng)文件在數(shù)據(jù)庫中的標(biāo)志是通過一個邏輯目錄來映射的。(3)可以查詢操作和連接。也可以并行操作。(4)外部表字段只能進(jìn)行類型、長度、非空之類的一般設(shè)置,而不能進(jìn)行主鍵、默認(rèn)值、check約束、IDENTITY標(biāo)識規(guī)范、計(jì)算列規(guī)范等設(shè)置。列定義(包括數(shù)據(jù)類型和列數(shù))必須與外部文件中的數(shù)據(jù)匹配。如果存在不匹配,則在查詢實(shí)際數(shù)據(jù)時會拒絕文件行。4.2.7外部表

(5)FILE_FORMAT=external_file_format_name指定為外部數(shù)據(jù)存儲文件類型和壓縮方法的外部文件格式對象的名稱。(7)REJECT_TYPE=value|percentage說明REJECT_VALUE選項(xiàng)是指定為文本值還是百分比。REJECT_VALUE=reject_value指定在查詢失敗之前可以拒絕的行數(shù)的值或百分比。值REJECT_VALUE是文本值。當(dāng)拒絕的行數(shù)超過reject_value時,PolyBase查詢會失敗。例如,如果REJECT_VALUE=5并且REJECT_TYPE=value,則PolyBaseSELECT查詢會在拒絕了5行之后失敗。值REJECT_VALUE是百分比。當(dāng)失敗行的百分比超過reject_value時,PolyBase查詢會失敗。每隔一段時間計(jì)算失敗行的百分比。4.2.7外部表

(8)REJECT_SAMPLE_VALUE=reject_sample_value當(dāng)指定REJECT_TYPE=percentage時,此屬性是必需的。它確定在PolyBase重新計(jì)算拒絕的行的百分比之前要嘗試檢索的行數(shù)。Reject_sample_value參數(shù)必須是介于0與2,147,483,647之間的整數(shù)。例如,如果REJECT_SAMPLE_VALUE=1000,則PolyBase會在嘗試從外部數(shù)據(jù)文件導(dǎo)入1000行后計(jì)算失敗行的百分比。如果失敗行的百分比小于reject_value,則PolyBase會嘗試檢索另外1000行。它在嘗試導(dǎo)入每個另外1000行后會繼續(xù)重新計(jì)算失敗行的百分比。4.2.7外部表

【例4.19】在當(dāng)前數(shù)據(jù)庫服務(wù)器配置PolyBase,在studentcourse數(shù)據(jù)庫中創(chuàng)建sqlserver.book外部表來訪問同一個數(shù)據(jù)庫服務(wù)器中的bookshop數(shù)據(jù)庫中的book表。如圖4.33所示。操作步驟如下:步驟一:配置選項(xiàng)'polybaseenabled'為1。運(yùn)行RECONFIGURE語句進(jìn)行安裝USEmasterGO

EXECsp_configure'polybaseenabled',1

reconfigurewithoverrideGo4.2.7外部表

步驟二:數(shù)據(jù)庫主密鑰是指用于保護(hù)證書私鑰的對稱密鑰以及數(shù)據(jù)庫中存在的非對稱密鑰。創(chuàng)建studentcourse數(shù)據(jù)庫主密鑰MASTERKEYUSEstudentcourseGODROPMASTERKEYCREATEMASTERKEYENCRYPTIONBYPASSWORD='888888';GO4.2.7外部表

步驟三:

創(chuàng)建數(shù)據(jù)庫憑據(jù)。數(shù)據(jù)庫憑據(jù)不會映射到服務(wù)器登錄或數(shù)據(jù)庫用戶。只要數(shù)據(jù)庫在執(zhí)行需要訪問權(quán)限的操作,數(shù)據(jù)庫就可使用憑據(jù)訪問外部位置--DROPDATABASESCOPEDCREDENTIALSqlServerCredentialsCREATEDATABASESCOPEDCREDENTIALSqlServerCredentialsWITHIDENTITY='sa',Secret='123456';--登錄名密碼GO4.2.7外部表

步驟四:創(chuàng)建外部數(shù)據(jù)源SQLServerInstance--DROPEXTERNALDATASOURCESQLServerInstanceCREATEEXTERNALDATASOURCESQLServerInstanceWITH(LOCATION='sqlserver://127.0.0.1:1433',PUSHDOWN=ON,CREDENTIAL=sqlServerCredentials,CONNECTION_OPTIONS='ssl=false;');GO4.2.7外部表

步驟五:創(chuàng)建獨(dú)立的架構(gòu)sqlServer--dropSCHEMAsqlserverCREATESCHEMAsqlserver;GO4.2.7外部表

步驟六:創(chuàng)建外部表sqlserver.book,引用的是上面定義的外部數(shù)據(jù)源(外部表與外部數(shù)據(jù)源類型要求一致)

--DROPEXTERNALTABLEsqlserver.bookCREATEEXTERNALTABLEsqlserver.book(

書號intNOTnull,

書名char(20)notnull,

出版社char(20),

出版日期datetime,

單價(jià)smallint,

數(shù)量smallint,

電子郵件地址varchar(25))WITH(LOCATION='bookshop.dbo.book',DATA_SOURCE=SQLServerInstance–在步驟四創(chuàng)建的外部數(shù)據(jù)源);GO4.2.7外部表

步驟七:創(chuàng)建統(tǒng)計(jì)信息CREATESTATISTICSOrdersOrderKeyStatisticsONsqlserver.book([書號])WITHFULLSCAN4.2.8圖形表

圖形數(shù)據(jù)庫中圖形指的拓?fù)鋱D形,是一些節(jié)點(diǎn)(Node)表和邊緣(Edge)表的合集,(Node)對應(yīng)關(guān)系數(shù)據(jù)庫中的實(shí)體,邊緣表指示節(jié)點(diǎn)之間的關(guān)系。1.創(chuàng)建節(jié)點(diǎn)表與邊緣表命令格式

CREATETABLE{數(shù)據(jù)庫名.架構(gòu)名.表名|架構(gòu)名.表名|表名}(

列名,數(shù)據(jù)類型[NOTNULL][identity(初值,步長)][DEFAULT默認(rèn)值][UNIQUE][PRIMARYKEY][CLUSTERED|NONCLUSTERED][,

列名,數(shù)據(jù)類型[NOTNULL][DEFAULT默認(rèn)值][UNIQUE][,…n]][,

列名AS計(jì)算列值的表達(dá)式[,…n]][,[CONSTRAINT主鍵約束名]PRIMARYKEY(屬性名)][,[CONSTRAINT檢查約束名]CHECK(邏輯表達(dá)式)[,…n]][,[FOREIGNKEY(外鍵屬性)REFERENCES參照表(參照屬性)[,…n]])AS[NODE|EDGE][ON{文件組|默認(rèn)文件組}][;]4.2.8圖形表2.功能

創(chuàng)建圖形表的語句與普通表大體相同,只是在語句最后加上ASNODE或ASEDGE,表示創(chuàng)建的是Node表(節(jié)點(diǎn)表)還是Edge表(邊緣表)。圖形表比較適合用來表示這種實(shí)體與實(shí)體之間有明顯關(guān)聯(lián)關(guān)系的情況,比如學(xué)生和課程,學(xué)生和課程是Node表,選課記錄是Edge表。

在SSMS中,可以看到數(shù)據(jù)庫的“表”節(jié)點(diǎn)下面有“圖形表”這個節(jié)點(diǎn)。4.2.8圖形表【例4.20】

在studentcourse數(shù)據(jù)庫中創(chuàng)建s2(NODE)、c2(NODE)、sc2(EDGE)三張圖形表。關(guān)系圖如圖3.5所示。 CREATETABLES2(

學(xué)號Char(5)NOTNULLDEFAULT('J0400')CHECK(學(xué)號Like'[A-Z][0-9][0-9][0-9][0-9]')PRIMARYKEYCLUSTERED,

姓名Char(8)NOTNULL,

性別Char(2)NOTNULLCHECK(性別='女'OR性別='男'),

出生日期DatetimeNOTNULLDEFAULT('19800101'),

系Varchar(20)NOTNULL,

電話Char(8)NULLCHECK(電話Like'[0-9][0-9][0-9]-[0-9][0-9][0-9][0-9]') )ASNODE;

4.2.8圖形表CREATETABLEC2(

課程號Char(3)NOTNULLCHECK(課程號Like'[A-C][0-9][0-9]')PRIMARYKEYCLUSTERED,

課程名Varchar(20)NOTNULL,

學(xué)分SmallintNULL,

預(yù)選課程號Char(3)NULLFOREIGNKEY(預(yù)選課程號)REFERENCESC(課程號),

教師Char(8)NULL )ASNODE;

CREATETABLESC2(

成績SmallintNULLCHECK(成績>=0AND成績<=100OR成績ISNULL) )ASEDGE;

4.3.1使用SQLServerManagementStudio插入、修改與刪除數(shù)據(jù)4.3數(shù)據(jù)庫表的操作4.3.2使用T-SQL語句進(jìn)行插入、修改和刪除數(shù)據(jù)1.插入數(shù)據(jù)2.更新數(shù)據(jù)3.刪除記錄插入數(shù)據(jù)記錄的方法有三種,第一種是利用SQLServerManagementStudio,第二種是使用SELECT查詢語句(本節(jié)暫不介紹),第三種是使用INSERT命令。1)命令格式INSERTINTO數(shù)據(jù)表名(列名表)VALUES(元組值)INSERTINTO數(shù)據(jù)表名(列名表)SELECT查詢語句INSERTINTO數(shù)據(jù)表名(列名表)DEFAULTVALUES2)功能向指定數(shù)據(jù)表的屬性列插入數(shù)據(jù),VALUES后跟的元組值為屬性列提供數(shù)據(jù)。其中列名表中的屬性排列順序和VALUES后跟的元組值的排列順序要一致。對應(yīng)的數(shù)據(jù)類型要一致。如果沒有指定列名表,則表示數(shù)據(jù)表中的所有屬性列?!癉EFAULTVALUES”選項(xiàng)會將默認(rèn)值插入到該屬性列中,如果某列沒有默認(rèn)值,允許則向該列插入空值NULL,如果某列不允許空值也沒有默認(rèn)值,則會出錯。1.插入數(shù)據(jù)【例4.21】以下示例使用屬性列顯式指定插入到每個列的值。方法一:使用SQLServerManagementStudio方法二:使用SQL命令。USEStudentcourseGOINSERTINTOs(學(xué)號,姓名,性別,出生日期,系)VALUES(‘L04001','張?jiān)讫?,'男',‘2002-11-11','路橋系')GoSELECT*FROMs1.插入數(shù)據(jù)【例4.22】將查詢結(jié)果插入數(shù)據(jù)表,如將學(xué)號‘L04001’、成績80以及課程表中所有課程號插入到sc中。方法一:使用SQLServerManagementStudio方法二:使用SQL命令。USEStudentcourseGOINSERTINTOscSELECT‘L04001',課程號,80FROMcGoSELECT*FROMsc1.插入數(shù)據(jù)1.插入數(shù)據(jù)【例4.23】向s2和c2節(jié)點(diǎn)表插入數(shù)據(jù),如圖4.35-4.36所示。--插入s2節(jié)點(diǎn)表記錄值的語句如下:insertintos2values('J04001','李麗','女','2002-2-12','管理信息系','931-1234')insertintos2values('J04002','馬俊萍','女','2000-12-2','管理信息系','931-1288')insertintos2values('J04003','王永明','男','2001-12-1','管理信息系','571-2233')insertintos2values('J04004','姚江','男','2002-8-9','管理信息系','571-8848')insertintos2values('Q04001','陳小紅','女','2002-2-12','汽車系','571-1122')insertintos2values('Q04003','張干勁','男','2002-1-15','汽車系','571-1111')1.插入數(shù)據(jù)圖4.35對圖形表s2插入數(shù)據(jù)結(jié)果窗口1.插入數(shù)據(jù)--插入c2節(jié)點(diǎn)表記錄值的語句如下:insertintoc2values('C01','數(shù)據(jù)庫',3,'C04','陳弄清')insertintoc2values('C02','C語言',4,'C04','應(yīng)刻苦')insertintoc2values('C03','數(shù)據(jù)結(jié)構(gòu)',3,'C02','管功臣')insertintoc2values('C04','計(jì)算機(jī)應(yīng)用基礎(chǔ)',2,null,'李學(xué)成')insertintoc2values('C05','網(wǎng)絡(luò)技術(shù)',null,'C04','馬努力')1.插入數(shù)據(jù)圖4.36對圖形表c2插入數(shù)據(jù)結(jié)果窗口1.插入數(shù)據(jù)【例4.24】將表3.5中的學(xué)生選課信息插入sc2邊緣數(shù)據(jù),需要節(jié)點(diǎn)提供$node_id和$from_id兩個字段(屬于隱藏字段),如圖4.37所示。--插入sc2邊緣表記錄值的語句如下:INSERTINTOsc2VALUES((SELECT$node_idFROMs2WHERE[學(xué)號]='J0401'),(SELECT$node_idFROMc2WHERE[課程號]='C01'),88);INSERTINTOsc2VALUES((SELECT$node_idFROMs2WHERE[學(xué)號]='J0401'),(SELECT$node_idFROMc2WHERE[課程號]='C02'),93);INSERTINTOsc2VALUES((SELECT$node_idFROMs2WHERE[學(xué)號]='J0401'),(SELECT$node_idFROMc2WHERE[課程號]='C03'),99);INSERTINTOsc2VALUES((SELECT$node_idFROMs2WHERE[學(xué)號]='J0401'),(SELECT$node_idFROMc2WHERE[課程號]='C04'),89);INSERTINTOsc2VALUES((SELECT$node_idFROMs2WHERE[學(xué)號]='J0401'),(SELECT$node_idFROMc2WHERE[課程號]='C05'),86);INSERTINTOsc2VALUES((SELECT$node_idFROMs2WHERE[學(xué)號]='J0402'),(SELECT$node_idFROMc2WHERE[課程號]='C01'),90);1.插入數(shù)據(jù)圖4.37對圖形表sc2插入數(shù)據(jù)結(jié)果窗口1)命令格式UPDATE基本表名

SET列名=值表達(dá)式[,列名=值表達(dá)式…][WHERE條件表達(dá)式]2)功能更新指定基本表,滿足WHERE子句條件的記錄的指定屬性值。其中值表達(dá)式可以是常量、變量、表達(dá)式。若缺省WHERE,則修改表中的所有元組。但在進(jìn)行修改操作時,需注意數(shù)據(jù)庫的一致性?!纠?.25】更新s表中的所有行出生日期列中的值變?yōu)樵錾掌谥导?。方法一:使用SQLServerManagementStudio方法二:使用SQL命令

USEStudentcourseGOUPDATEsSET出生日期=出生日期+1

溫馨提示

  • 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論