數(shù)據(jù)表的管理與使用-完_第1頁
數(shù)據(jù)表的管理與使用-完_第2頁
數(shù)據(jù)表的管理與使用-完_第3頁
數(shù)據(jù)表的管理與使用-完_第4頁
數(shù)據(jù)表的管理與使用-完_第5頁
已閱讀5頁,還剩102頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、第五章 數(shù)據(jù)表的管理與使用本章主要內(nèi)容1 5.1 數(shù)據(jù)類型數(shù)據(jù)類型25.2 創(chuàng)建表創(chuàng)建表35.3 修改表修改表45.4 刪除表刪除表55.5 數(shù)據(jù)管理數(shù)據(jù)管理65.6 數(shù)據(jù)完整性數(shù)據(jù)完整性5 數(shù)據(jù)表的管理與使用 SQL Server SQL Server 的表是最重要的數(shù)據(jù)庫對(duì)象,用戶數(shù)據(jù)分別存放在各個(gè)表中,對(duì)數(shù)據(jù)的增加、刪除、修改和查詢等都是通過表的操作來實(shí)現(xiàn)的。本章主要內(nèi)容1 5.1 數(shù)據(jù)類型數(shù)據(jù)類型25.2 創(chuàng)建表創(chuàng)建表35.3 修改表修改表45.4 刪除表刪除表55.5 數(shù)據(jù)管理數(shù)據(jù)管理65.6 數(shù)據(jù)完整性數(shù)據(jù)完整性5.1 數(shù)據(jù)類型 在創(chuàng)建表時(shí),必須為表中的每列指派一種數(shù)據(jù)類型,數(shù)據(jù)類

2、型確定了該列數(shù)據(jù)的取值范圍,它決定了數(shù)據(jù)在計(jì)算機(jī)中的存儲(chǔ)格式、存儲(chǔ)長度等屬性。SQL Server數(shù)據(jù)類型分為系統(tǒng)數(shù)據(jù)類型和用戶自定義數(shù)據(jù)類型。SQL Server2008中常用的系統(tǒng)數(shù)據(jù)類型如表5.1所示。5.1 數(shù)據(jù)類型表5.1 SQL Server2008中常用的系統(tǒng)數(shù)據(jù)類型分類分類說明說明數(shù)據(jù)類型數(shù)據(jù)類型數(shù)字?jǐn)?shù)據(jù)整數(shù)型bigint,int,smallint,tinyint精確數(shù)值型decimal,numeric浮點(diǎn)型float,real貨幣型money,smallmoney位型bit字符數(shù)據(jù)字符型char,varchar,Text(改用varchar(MAX)Unicode字符型nch

3、ar,nvarchar ,ntext(改用n varchar(MAX)日期時(shí)間數(shù)據(jù)日期時(shí)間型datetime,smalldatetime二進(jìn)制數(shù)據(jù)二進(jìn)制型binary,varbinary ,Image(改用varbinary(MAX)1. 數(shù)字?jǐn)?shù)據(jù)(1)整數(shù)型數(shù)據(jù)Bigint:-263263-1,精度19位,長度8個(gè)字節(jié),-9 223 372 036 854 775 808到9 223 372 036 854 775 807Int:-231231-1,精度10位,長度4個(gè)字節(jié),-2 147 483 648 到 2 147 483 647 Smallint:-215215-1,精度5位,長度2個(gè)

4、字節(jié),-32 768 到 32 767 Tinyint:0255,精度3位,長度1個(gè)字節(jié),0 到255 該類別的數(shù)據(jù)僅包含數(shù)字,包括正數(shù)、負(fù)數(shù)及分?jǐn)?shù)等。1. 數(shù)字?jǐn)?shù)據(jù)(2) 精確數(shù)值型 用于存儲(chǔ)帶有小數(shù)點(diǎn)且小數(shù)點(diǎn)后位數(shù)確定的實(shí)數(shù),包括decimal和Numeric兩類。功能上兩者完全等價(jià)。聲明格式:numeric(p,s)|decimal(p,s),其中p為精度,s為小數(shù)位數(shù)。精度:指數(shù)值中所存儲(chǔ)的十進(jìn)制數(shù)據(jù)的總位數(shù)。小數(shù)位數(shù):指數(shù)值數(shù)據(jù)中小數(shù)點(diǎn)右邊可以有的數(shù)字位數(shù)的最大值。如7654.321的精度為7,小數(shù)位數(shù)為3。注意:聲明該類型的數(shù)據(jù)時(shí),其小數(shù)位數(shù)必須小于精度。1. 數(shù)字?jǐn)?shù)據(jù)(3) 浮點(diǎn)

5、型 是指不能精確表示數(shù)據(jù)的精度的數(shù)據(jù)類型,使用此類型來存儲(chǔ)數(shù)據(jù)時(shí),可能會(huì)損失部分精度,它可以用于處理取值范圍非常大且對(duì)精度要求不是十分高的數(shù)值。real:-3.40E+38 3.40E+38 ,精度7位,長度4個(gè)字節(jié)float:-1.79E+308 1.79E+308 ,精度15位,長度8個(gè)字節(jié)1. 數(shù)字?jǐn)?shù)據(jù)(4) 貨幣型 專門用于處理貨幣的數(shù)據(jù)類型:money和smallmoney,它們用十進(jìn)制數(shù)表示貨幣值, 相當(dāng)于4位小數(shù)的DECIMAL值。money:精度19位,小數(shù)位數(shù)為4Smallmoney:精度為10,小數(shù)位數(shù)為4 當(dāng)向表中插入貨幣型數(shù)據(jù)時(shí),可在數(shù)據(jù)前面加上貨幣符號(hào)($),并且數(shù)據(jù)

6、中間不能有逗號(hào);如果貨幣值為負(fù)數(shù),需要在$后面加上負(fù)號(hào)。如:$777.90 $620 $-120.801. 數(shù)字?jǐn)?shù)據(jù)(5) 位型Bit類型用于存儲(chǔ)整數(shù),取值在0、1或NULL,常用于邏輯數(shù)據(jù)的存取。2. 字符數(shù)據(jù) 字符數(shù)據(jù)用于存儲(chǔ)漢字、英文字母、數(shù)字、標(biāo)點(diǎn)和各種符號(hào)。在輸入時(shí),需要用單引號(hào)括起來。 char(n)和nchar(n):定長的字符數(shù)據(jù)類型,n表示字符型數(shù)據(jù)的長度。 varchar(n)和nvarchar(n):變長的字符數(shù)據(jù)類型,n表示串中字符的最大長度。 用于存放大量的字符數(shù)據(jù)的文本型text和ntext,現(xiàn)在分別用varchar(MAX)和nvarchar(MAX)來替換使用。

7、3. 日期時(shí)間數(shù)據(jù) Datetime:表示日期范圍1753-1-19999-12-31的日期和時(shí)間數(shù)據(jù),精度為3ms。數(shù)據(jù)長度為8個(gè)字節(jié) Smalldatetime:表示日期范圍1900-1-12079-6-6的日期和時(shí)間數(shù)據(jù),精度為1分鐘。數(shù)據(jù)長度為4個(gè)字節(jié)4. 二進(jìn)制數(shù)據(jù) 二進(jìn)制數(shù)據(jù)類型表示的是位數(shù)據(jù)流,一般用于存儲(chǔ)二進(jìn)制的大對(duì)象,如聲音、圖片、多媒體等。 Binary(n):存儲(chǔ)固定長度的二進(jìn)制數(shù)據(jù) varbinary(n):存儲(chǔ)可變長度的二進(jìn)制數(shù)據(jù) Image圖像數(shù)據(jù)類型用于存放圖片、照片等,實(shí)際存儲(chǔ)的是可變長度的二進(jìn)制數(shù)據(jù),建議用varbinary(MAX)替換。本章主要內(nèi)容1 5.

8、1 數(shù)據(jù)類型數(shù)據(jù)類型25.2 創(chuàng)建表創(chuàng)建表35.3 修改表修改表45.4 刪除表刪除表55.5 數(shù)據(jù)管理數(shù)據(jù)管理65.6 數(shù)據(jù)完整性數(shù)據(jù)完整性5.2 創(chuàng)建表 在SQL Server中建立數(shù)據(jù)庫后,就可以在該數(shù)據(jù)庫中創(chuàng)建表了。為了確定新表的結(jié)構(gòu),用戶需要決定以下內(nèi)容:表中的列數(shù)、每列的列名、數(shù)據(jù)類型及數(shù)據(jù)的長度、列是否可以接受空值、是否使用約束(例如:對(duì)各列的取值范圍進(jìn)行限制)以及確定主鍵和外鍵等。創(chuàng)建表可以通過SSMS窗口界面方式或T-SQL命令方式來實(shí)現(xiàn)。5.2.1使用窗口方式創(chuàng)建表 下面使用窗口方式在“student”數(shù)據(jù)庫中創(chuàng)建“學(xué)生”表,學(xué)生表的結(jié)構(gòu)定義如表5.2所示。字段名稱字段名稱

9、數(shù)據(jù)類型數(shù)據(jù)類型長度長度是否為空是否為空是否主鍵是否主鍵學(xué)號(hào)char12否是姓名varchar8否性別char2否出生日期datetime是班級(jí)代碼char9否表5.2 學(xué)生表結(jié)構(gòu) 其中學(xué)號(hào)為定長字符串,12位;姓名為變長字符串,最長8位,可存儲(chǔ)最多4個(gè)漢字;性別定長字符串,2為,可存儲(chǔ)一個(gè)漢字“男”或“女”。操作步驟如下:5.2.1使用窗口方式創(chuàng)建表步驟一步驟一1. 打開SSMS,在【對(duì)象資源管理器】窗口中依次展開【數(shù)據(jù)庫】【student】,右擊【表】節(jié)點(diǎn),在彈出的快捷菜單中選擇【新建表】命令就能打開【表設(shè)計(jì)器】,如圖5.1所示。圖5.1 表的右鍵菜單窗口5.2.1使用窗口方式創(chuàng)建表步驟二

10、步驟二2. 設(shè)計(jì)表結(jié)構(gòu)。在【表設(shè)計(jì)器】界面中可進(jìn)行表結(jié)構(gòu)的輸入,如圖5.2所示。圖5.2 表設(shè)計(jì)器錄入窗口5.2.1使用窗口方式創(chuàng)建表步驟三步驟三3. 設(shè)置主鍵。在“學(xué)號(hào)”列上右鍵,在彈出的菜單中選擇【設(shè)置主鍵】命令即 可將“學(xué)號(hào)”字段設(shè)置為主鍵,表示該列的值是唯一不重復(fù)的,如圖5.4所示。圖5.3 設(shè)計(jì)學(xué)生表結(jié)構(gòu)窗口 圖5.4設(shè)置主鍵窗口設(shè)置成功后,“學(xué)號(hào)”的前面會(huì)有一個(gè)鑰匙樣的圖標(biāo),如圖5.5所示。 圖5.5 主鍵設(shè)置成功窗口5.2.1使用窗口方式創(chuàng)建表4. 設(shè)置表名。點(diǎn)擊工具欄的【保存】按鈕,出現(xiàn)輸入表名對(duì)話框,如圖5.6所示。在其中錄入“學(xué)生”,【確定】后即可看到“student”數(shù)據(jù)

11、庫中已經(jīng)出現(xiàn)剛建立的“學(xué)生”表,如圖5.7所示。步驟四步驟四圖5.6 輸入表名稱窗口圖 5.7 創(chuàng)建表成功窗口5.2.2使用命令方式創(chuàng)建表 可以用T-SQL中的Create Table語句來創(chuàng)建表,基本語法格式如下:CREATE TABLE table_name (字段1 數(shù)據(jù)類型 列的特征, 字段2 數(shù)據(jù)類型 列的特征, ) 其中,列的特征包括:是否為空(NULL)、是否為標(biāo)識(shí)列(自動(dòng)編號(hào))、是否有默認(rèn)值、是否為主鍵等。創(chuàng)建表的語法有很多選項(xiàng),這里僅列出最常用的一些,后續(xù)會(huì)逐漸補(bǔ)充。本章主要內(nèi)容1 5.1 數(shù)據(jù)類型數(shù)據(jù)類型25.2 創(chuàng)建表創(chuàng)建表35.3 修改表修改表45.4 刪除表刪除表55

12、.5 數(shù)據(jù)管理數(shù)據(jù)管理65.6 數(shù)據(jù)完整性數(shù)據(jù)完整性5.3 修改表 表創(chuàng)建后,可以根據(jù)需要進(jìn)行修改,如更改表名、增加列、刪除列、修改已有列的屬性(列名、數(shù)據(jù)類型、是否為空值)、調(diào)整列的順序??梢酝ㄟ^窗口方式或命令方式修改表。注意:表名更改后,與此相關(guān)的某些對(duì)象(如視圖)以及通過表名與表相關(guān)的存儲(chǔ)過程將無效,因此一般不建議更改表名。5.3.1使用窗口方式修改表修改“student”數(shù)據(jù)庫下“學(xué)生”表的步驟如下:步驟一步驟一1. 打開SSMS,在【對(duì)象資源管理器】窗口中展開【數(shù)據(jù)庫】節(jié)點(diǎn),選擇“student”數(shù)據(jù)庫,找到要修改的“學(xué)生”表。右擊“學(xué)生”表,在彈出的快捷菜單中選擇【設(shè)計(jì)】命令,如圖

13、5.10所示。圖5.10 表的右鍵快捷菜單窗口5.3.1使用窗口方式修改表步驟二步驟二2. 在打開的【表設(shè)計(jì)器】窗口,與創(chuàng)建表時(shí)相同,可以對(duì)表進(jìn)行修改,例如插入列、刪除列、修改列名、主鍵、數(shù)據(jù)類型等,如圖5.11所示。 圖5.11 表設(shè)計(jì)器修改窗口5.3.1使用窗口方式修改表步驟三步驟三3. 修改完成后點(diǎn)擊【保存】按鈕以使所做的修改生效。5.3.2使用命令方式修改表修改表使用alter table語句來實(shí)現(xiàn)。其語法格式如下:ALTER TABLE table_name ALTER COLUMN col_name /*修改已有列的屬性*/ new_data_type | ADD ,n /*增加新

14、列*/| DROP COLUMN col_name ,n /*刪除列*/【例5.5】 在學(xué)生表中增加“家庭地址”列,數(shù)據(jù)類型為varchar(30),不允許為空。在查詢編輯器中輸入并執(zhí)行以下語句即可:use studentgoalter table 學(xué)生 add 家庭地址 varchar(30) not nullgo【例5.6】 修改學(xué)生表中的“家庭地址”列,將數(shù)據(jù)類型改為varchar(50),允許為空,代碼如下。use studentgoalter table 學(xué)生 alter column 家庭地址 varchar(50) nullgo【例5.7】 刪除學(xué)生表中的“家庭地址”列,代碼如下

15、。use studentgoalter table 學(xué)生 drop column 家庭地址go本章主要內(nèi)容1 5.1 數(shù)據(jù)類型數(shù)據(jù)類型25.2 創(chuàng)建表創(chuàng)建表35.3 修改表修改表45.4 刪除表刪除表55.5 數(shù)據(jù)管理數(shù)據(jù)管理65.6 數(shù)據(jù)完整性數(shù)據(jù)完整性5.4.1使用窗口方式刪除表 找到要?jiǎng)h除的表,右鍵,在彈出的快捷菜單中選擇【刪除】,出現(xiàn)【刪除對(duì)象】對(duì)話框,單擊【確定】即可,如圖5.12所示。圖5.12 刪除表窗口5.4.2使用命令方式刪除表 刪除表使用drop table語句。語法格式:DROP TABLE table_name其中table_name是要被刪除的表名。如要?jiǎng)h除“stud

16、ent”數(shù)據(jù)庫中的“學(xué)生”表,在查詢編輯器窗口中輸入以下內(nèi)容即可。use studentgodrop table 學(xué)生Go本章主要內(nèi)容1 5.1 數(shù)據(jù)類型數(shù)據(jù)類型25.2 創(chuàng)建表創(chuàng)建表35.3 修改表修改表45.4 刪除表刪除表55.5 數(shù)據(jù)管理數(shù)據(jù)管理65.6 數(shù)據(jù)完整性數(shù)據(jù)完整性5.5 數(shù)據(jù)管理 表是存儲(chǔ)數(shù)據(jù)的地方,在表創(chuàng)建完成后,就可以對(duì)表進(jìn)行數(shù)據(jù)管理操作,包括:向表中添加數(shù)據(jù)、修改數(shù)據(jù)和刪除數(shù)據(jù)??梢允褂么翱诨蛎罘绞焦芾頂?shù)據(jù)。圖5.13 編輯表數(shù)據(jù)窗口 使用窗口方式進(jìn)行數(shù)據(jù)管理較為簡(jiǎn)單。在SSMS中,找到要管理的“學(xué)生”表,右鍵,彈出快捷菜單,如圖5.13所示。5.5 數(shù)據(jù)管理 選擇

17、【編輯前200行】,出現(xiàn)數(shù)據(jù)管理窗口,如圖5.14所示。在其中可以進(jìn)行數(shù)據(jù)記錄的瀏覽、添加、修改和刪除操作。還可以通過表右鍵快捷菜單中的【選擇前1000行】來查看表中的數(shù)據(jù)。5.5.1插入數(shù)據(jù)插入數(shù)據(jù)的語法格式如下:INSERT INTO table_name /*表名*/ ( column_list ) /*列名的列表,用逗號(hào)分隔*/ VALUES ( expression_list ) /*值的列表,用逗號(hào)分隔*/ 其中:(1) INTO:可選關(guān)鍵字,可省略(2) 列名:可選,如果省略,則按照表結(jié)構(gòu)依次添加所有列(3) 多個(gè)列或多個(gè)值之間用逗號(hào)分隔開(4) 值的數(shù)目、順序和類型要與列相對(duì)應(yīng)

18、5.5.1插入數(shù)據(jù)【例5.8】l向“系部”表添加一條記錄,代碼如下:use student goinsert 系部(代碼,名稱) values(15,計(jì)算機(jī)系)go還可以用省略列名的寫法,代碼如下:use student goinsert 系部 values(15,計(jì)算機(jī)系)go5.5.1插入數(shù)據(jù)【例5.9】l向“專業(yè)“表添加一條記錄,代碼如下:use student goinsert 專業(yè)(代碼,名稱,系部代碼) values(1501,軟件工程,15)go5.5.1插入數(shù)據(jù)【例5.10】l向“班級(jí)”表添加一條記錄,代碼如下:use student goinsert 班級(jí)(代碼,名稱,專業(yè)代

19、碼) values(120415011,軟件工程1班,1501) go5.5.1插入數(shù)據(jù)【例5.11】l 向“學(xué)生”表添加3條記錄,代碼如下:use student goinsert 學(xué)生(學(xué)號(hào),姓名,性別,出生日期,班級(jí)代碼) values(120415011001,王浩然,女,1995-7-12,120415011)insert 學(xué)生(學(xué)號(hào),姓名,性別,出生日期,班級(jí)代碼) values(120415011002,趙騰高,男,1994-11-5,120415011)insert 學(xué)生(學(xué)號(hào),姓名,性別,班級(jí)代碼) values(120415011003,尹小明,男,120415011)go

20、5.5.1插入數(shù)據(jù) 執(zhí)行完成后結(jié)果如圖5.15所示。其中第3條記錄的出生日期字段定義為“可以為空”,這里沒有錄入值,默認(rèn)為NULL。圖5.15 表數(shù)據(jù)錄入顯示窗口【例5.11】5.5.2修改數(shù)據(jù)語法格式如下:UPDATE table_name /*表名*/SET column_name = expression | DEFAULT | NULL /*列名=更新值*/ ,.n /*多列更新用逗號(hào)分隔*/ WHERE /*更新的條件,若無where條件,則修改表中所有的行*/5.5.2修改數(shù)據(jù)【例5.12】l 修改“學(xué)生”表,將“尹小明”的出生日期修改為1996年6月11日,代碼如下:use st

21、udent goupdate 學(xué)生 set 出生日期=1996-6-11 where 姓名=尹小明go 執(zhí)行后可以看到姓名為“尹小明”的出生日期被修改為“1996-6-11”,如圖5.16所示。5.5.2修改數(shù)據(jù)【例5.12】圖5.16 表數(shù)據(jù)修改顯示窗口5.5.3刪除數(shù)據(jù)DELETE 語句的語法格式如下:DELETE FROM table_name /*表名*/ WHERE /*刪除的條件,若無where則會(huì)刪除所有行的數(shù)據(jù)*/【例5.13】刪除“學(xué)生”表中姓名為“尹小明”的記錄,代碼如下:use student godelete 學(xué)生 where 姓名=尹小明go執(zhí)行完成后可以看到“尹小明

22、”的記錄被刪除,如圖5.17所示。圖5.17 表數(shù)據(jù)刪除顯示窗口【例5.14】l 刪除“學(xué)生”表中所有記錄,代碼如下:use student godelete 學(xué)生 go 執(zhí)行完成后將刪除學(xué)生表的所有數(shù)據(jù),該表變成無數(shù)據(jù)的空表,但表的結(jié)構(gòu)還在,如圖5.18所示。圖5.18 表數(shù)據(jù)清除顯示窗口5.5.4索引1. 索引的概念 索引(Index)是一種特殊類型的數(shù)據(jù)庫對(duì)象,它保存著數(shù)據(jù)表中一列或幾列組合的排序結(jié)構(gòu)。索引與書籍的目錄作用類似,為數(shù)據(jù)表增加索引,可以大大提高數(shù)據(jù)的檢索效率。索引是數(shù)據(jù)庫中一個(gè)重要的對(duì)象,下面將詳細(xì)介紹索引的基本概念、優(yōu)點(diǎn)、分類及操作。 索引是針對(duì)一個(gè)表,以表列為基礎(chǔ)建立的

23、數(shù)據(jù)庫對(duì)象,它保存著表中排序的索引列,并且記錄了索引列在數(shù)據(jù)表中的物理存儲(chǔ)位置,實(shí)現(xiàn)了表中數(shù)據(jù)的邏輯排序。5.5.4索引2. 索引的優(yōu)點(diǎn) 可以大大加快數(shù)據(jù)檢索速度。 通過創(chuàng)建唯一索引,可以保證數(shù)據(jù)記錄的唯一性。 在使用ORDER BY和GROUP BY子句進(jìn)行檢索數(shù)據(jù)時(shí), 可以顯著減少查詢中分組和排序的時(shí)間。 使用索引可以在檢索數(shù)據(jù)的過程中使用優(yōu)化隱藏器,提高系統(tǒng)性能。 可以加速表與表之間的連接,在實(shí)現(xiàn)數(shù)據(jù)的參照完整性方面有特別的意義。5.5.4索引3. 索引的分類 根據(jù)索引的順序與數(shù)據(jù)表的物理順序是否相同,可以把索引分成兩種類型:聚集索引與非聚集索引。(1) 聚集索引(Clustered I

24、ndex) 數(shù)據(jù)表的物理順序和索引表的順序相同,它根據(jù)表中的一列或多列的值排列記錄。每一個(gè)表只能有一個(gè)聚集索引,因?yàn)橐粋€(gè)表的記錄只能以一種物理順序存放,在通常情況下,使用的都是聚集索引。默認(rèn)主鍵是聚集索引。(2) 非聚集索引(Nonclustered Index)數(shù)據(jù)表的物理順序和索引表的順序不相同,索引表僅僅包含指向數(shù)據(jù)表的指針,這些指針本身是有序的,用于在表中快速定位數(shù)據(jù)。5.5.4索引3. 索引的分類 對(duì)于非聚集索引,表的物理順序與索引順序不同,即表的數(shù)據(jù)并不是按照索引列排序的。索引是有序的,而表中的數(shù)據(jù)是無序的,如圖5.19所示。圖5.19 非聚集索引示意圖5.5.4索引3. 索引的分

25、類在實(shí)際中常見的索引有:主鍵索引、唯一索引。索引按照結(jié)構(gòu)可分為聚集索引和非聚集索引兩種不同的類型。按照實(shí)現(xiàn)的功能分,有一類索引被稱作“唯一索引”。它既可以采用聚集索引的結(jié)構(gòu),又可以采用非聚集索引的結(jié)構(gòu)。唯一索引的特征: 不允許兩行具有相同的索引值。 可用于實(shí)施實(shí)體完整性。 在創(chuàng)建主鍵約束和唯一約束時(shí)自動(dòng)創(chuàng)建唯一索引。在已有數(shù)據(jù)的表上創(chuàng)建唯一索引時(shí),如果在該列數(shù)據(jù)存在重復(fù)值,那么系統(tǒng)將返回錯(cuò)誤信息。在實(shí)際的編程應(yīng)用中會(huì)經(jīng)常使用到唯一索引。因?yàn)樵谝粋€(gè)表中,可能會(huì)有很多列的列值需要保證其唯一性,如:有身份證號(hào)、工號(hào)、學(xué)號(hào)等,可在這些列上創(chuàng)建唯一索引。5.5.4索引4. 創(chuàng)建索引(1) 使用窗口方式創(chuàng)

26、建索引下面為“系部”表的“名稱”字段建立唯一索引。圖5.20 創(chuàng)建表索引窗口 圖5.21 索引設(shè)置窗口5.5.4索引圖5.22 索引列設(shè)置窗口 圖5.23 索引設(shè)置結(jié)果顯示窗口4. 創(chuàng)建索引5.5.4索引4. 創(chuàng)建索引(2) 使用命令方式創(chuàng)建索引創(chuàng)建索引使用CREATE INDEX語句。CREATE INDEX語句的語法形式如下:CREATE UNIQUE CLUSTERED | NONCLUSTERED INDEX index_name ON table_name(column_name ASC | DESC ,.n )5.5.4索引5. 管理索引 索引創(chuàng)建成功后可以根據(jù)需要進(jìn)行改名、修改索

27、引設(shè)置、刪除索引等操作??梢栽凇八饕O(shè)置窗口”進(jìn)行修改和刪除,可以使用drop index table_name.index_name來刪除索引。5.5.4索引6. 使用索引的代價(jià) 使用索引雖然可以提高系統(tǒng)性能,但并不是每一列都適合建立索引,使用索引要付出一定的代價(jià)。 創(chuàng)建索引要花費(fèi)時(shí)間和占用存儲(chǔ)空間。 建立索引加快了數(shù)據(jù)檢索速度,卻減慢了數(shù)據(jù)修改速度。7. 建立索引的原則 使用索引要付出代價(jià),所以在建立索引時(shí)要根據(jù)實(shí)際情況,考慮哪些列適合建立索引,哪些列不適合建立索引。原則如下。(1) 考慮建索引的列如果在一個(gè)列上創(chuàng)建索引,該列就稱為索引列。索引列中的值稱為關(guān)鍵字值??紤]建索引的列有如下這些

28、: 主鍵通常檢索、存取表是通過主鍵來進(jìn)行的。因此,應(yīng)該考慮在主鍵上建立索引。 連接中頻繁使用的列用于連接的列若按順序存放,系統(tǒng)可以很快地執(zhí)行連接。如外鍵,除用于實(shí)現(xiàn)參照完整性外,還經(jīng)常用于進(jìn)行表的連接。 在某一范圍內(nèi)頻繁搜索的列和按排序順序頻繁檢索的列7. 建立索引的原則(2) 不考慮建索引的列 建立索引需要產(chǎn)生一定的存儲(chǔ)開銷,在進(jìn)行插入和更新數(shù)據(jù)的操作時(shí),維護(hù)索引也要花費(fèi)時(shí)間和空間,因此,沒有必要對(duì)表中的所有列都建立索引。創(chuàng)建索引與否以及在哪些列上建立索引,要看建立索引和維護(hù)索引的代價(jià)與因建立索引所節(jié)省的時(shí)間相比哪個(gè)更合算。7. 建立索引的原則 很少或從來不在查詢中引用的列,因?yàn)橄到y(tǒng)很少或從

29、來不根據(jù)這個(gè)列的值去查找數(shù)據(jù)行。 只有兩個(gè)或很少幾個(gè)值的列(如性別,只有兩個(gè)值“男”或“女”),以這樣的列創(chuàng)建索引并不能得到建立索引的好處。 以bit、text、image數(shù)據(jù)類型定義的列。 數(shù)據(jù)行數(shù)很少的小表一般也沒有必要?jiǎng)?chuàng)建索引。一般來說,如下一些列不考慮建立索引:7. 建立索引的原則本章主要內(nèi)容1 5.1 數(shù)據(jù)類型數(shù)據(jù)類型25.2 創(chuàng)建表創(chuàng)建表35.3 修改表修改表45.4 刪除表刪除表55.5 數(shù)據(jù)管理數(shù)據(jù)管理65.6 數(shù)據(jù)完整性數(shù)據(jù)完整性5.6 數(shù)據(jù)完整性 數(shù)據(jù)完整性是指存儲(chǔ)在數(shù)據(jù)庫中數(shù)據(jù)的正確性和一致性。數(shù)據(jù)庫中數(shù)據(jù)是否完整關(guān)系到該數(shù)據(jù)庫能否真實(shí)的反映現(xiàn)實(shí)世界。以“學(xué)生”表為例,學(xué)

30、號(hào)要唯一不能重復(fù),性別只能是男或女。如果在增加、刪除和修改時(shí)不限制,就會(huì)出現(xiàn)數(shù)據(jù)庫中數(shù)據(jù)與現(xiàn)實(shí)不符的情況。因此保證數(shù)據(jù)的完整性在數(shù)據(jù)庫系統(tǒng)中非常重要。在SQL Server中可以通過約束、默認(rèn)、規(guī)則、觸發(fā)器來達(dá)到保證數(shù)據(jù)完整性的目的。5.6.1數(shù)據(jù)完整性分類1.實(shí)體完整性 根據(jù)數(shù)據(jù)完整性所作用的數(shù)據(jù)庫對(duì)象和范圍不同,數(shù)據(jù)完整性可分為實(shí)體完整性、域完整性、參照完整性和用戶定義完整性四種。 實(shí)體完整性又稱為行的完整性,要求表中有一個(gè)主鍵,其值不能為空且能唯一地標(biāo)識(shí)對(duì)應(yīng)的記錄。 實(shí)現(xiàn)實(shí)體完整性的方法主要有:主鍵約束PRIMARY KEY、唯一性約束UNIQUE、唯一索引UNIQUE INDEX、標(biāo)識(shí)

31、IDENTITY等。5.6.1數(shù)據(jù)完整性分類2. 域完整性 域完整性又稱為列完整性,指給定列輸入的有效性。 實(shí)現(xiàn)域完整性的方法主要有:默認(rèn)值約束DEFAULT、檢查約束CHECK、外鍵約束FOREIGN KEY、規(guī)則RULE、數(shù)據(jù)類型、非空性約束NOT NULL等。5.6.1數(shù)據(jù)完整性分類3. 參照完整性 參照完整性又稱為引用完整性。是指作用于有關(guān)聯(lián)的兩個(gè)或兩個(gè)以上的表,通過使用主鍵和外鍵或主鍵和唯一鍵之間的關(guān)系,使表中的鍵值在所有表中保持一致。 實(shí)現(xiàn)引用完整性的方法主要有:外鍵約束FOREIGN KEY。5.6.1數(shù)據(jù)完整性分類4. 用戶定義完整性 用戶定義的完整性是應(yīng)用領(lǐng)域需要遵守的約束條

32、件,其允許用戶定義不屬于其他任何完整性分類的特定業(yè)務(wù)規(guī)則。5.6.2約束的種類及創(chuàng)建 約束是SQL Server提供的自動(dòng)強(qiáng)制數(shù)據(jù)完整性的一種方法,通過定義列的取值規(guī)則來維護(hù)數(shù)據(jù)的完整性。SQL Serve支持的約束有主鍵約束、唯一性約束、檢查約束、非空約束、默認(rèn)約束和外鍵約束。5.6.2約束的種類及創(chuàng)建1. 主鍵約束(Primary key) 主鍵約束用來強(qiáng)制數(shù)據(jù)的實(shí)體完整性,它是在表中定義一個(gè)主鍵來唯一標(biāo)識(shí)表中的每行記錄。主鍵約束有如下特點(diǎn):每個(gè)表中只能有一個(gè)主鍵,主鍵可以是一列,也可以是多列的組合;主鍵值必須唯一并且不能為空,對(duì)于多列組合的主鍵,某列值可以重復(fù),但列的組合值必須唯一。 p

33、rimary約束名的命名:建議一般形式為 pk_表名_列名1. 主鍵約束(Primary key) 在窗口方式創(chuàng)建主鍵時(shí),需要在表設(shè)計(jì)器界面選中主鍵的列,若是多列組合的主鍵,需要將這些列同時(shí)選中,右鍵“設(shè)置主鍵”或點(diǎn)擊工具欄的鑰匙圖標(biāo)即可。 通過命令方式創(chuàng)建主鍵,可以在create table中完成,參考創(chuàng)建表,也可用alter table在已存在的表上創(chuàng)建主鍵,語法格式如下:Alter table table_name Add constraint constraint_name Primary key clustered | nonclustered (column,n)5.6.2約束的種

34、類及創(chuàng)建【例5.19】l 在“學(xué)生”表中設(shè)置“學(xué)號(hào)”為主鍵的代碼如下:use student goalter table 學(xué)生 add constraint pk_學(xué)生 primary key (學(xué)號(hào))go5.6.2約束的種類及創(chuàng)建2. 唯一性約束(UNIQUE) 唯一約束用來強(qiáng)制數(shù)據(jù)的實(shí)體完整性,它主要用來限制表的非主鍵列中不允許輸入重復(fù)值。唯一約束有如下特點(diǎn):一個(gè)表中可以定義多個(gè)唯一約束;每個(gè)唯一約束可以定義到一列上,也可以定義到多列上;空值可以出現(xiàn)在某列中一次。5.6.2約束的種類及創(chuàng)建2. 唯一性約束(UNIQUE)PRIMARY KEY約束與UNIQUE約束的主要區(qū)別如下:(1) 一

35、個(gè)數(shù)據(jù)表只能創(chuàng)建一個(gè)PRIMARY KEY約束,但一個(gè)表中可根據(jù)需要對(duì)不同的列創(chuàng)建若干個(gè)UNIQUE約束;(2) PRIMARY KEY字段的值不允許為NULL,而UNIQUE字段的值可取NULL;(3) 一般創(chuàng)建PRIMARY KEY約束時(shí),系統(tǒng)會(huì)自動(dòng)產(chǎn)生索引,索引的缺省類型為簇索引。 (4) 若某字段可唯一標(biāo)識(shí)一行,則將其定義為主鍵,如“學(xué)號(hào)”。如果要確保一個(gè)表中的非主鍵列不輸入重復(fù)值,應(yīng)在該列上定義唯一約束,如”身份證號(hào)”。5.6.2約束的種類及創(chuàng)建2. 唯一性約束(UNIQUE) 通過命令方式創(chuàng)建唯一約束,可以用create unique index創(chuàng)建,也可用alter table為

36、已存在的表創(chuàng)建唯一約束,語法格式如下:Alter table table_name Add constraint constraint_name Unique clustered | nonclustered (column,n)5.6.2約束的種類及創(chuàng)建【例5.20】l 在“學(xué)生”表中為“姓名”字段設(shè)置唯一約束的代碼如下:use student goalter table 學(xué)生 add constraint uk_學(xué)生 unique (姓名)go5.6.2約束的種類及創(chuàng)建3. 檢查約束(CHECK) 檢查約束用來強(qiáng)制數(shù)據(jù)的域完整性,它使用邏輯表達(dá)式來限制表中的列可以接受哪些數(shù)據(jù)值。CHECK

37、約束通過對(duì)一個(gè)邏輯表達(dá)式的結(jié)果進(jìn)行判斷來對(duì)數(shù)據(jù)進(jìn)行核查。(1) 使用窗口方式創(chuàng)建約束5.6.2約束的種類及創(chuàng)建3. 檢查約束(CHECK) 圖5.26 check約束設(shè)置窗口圖5.27 check約束表達(dá)式設(shè)置窗口5.6.2約束的種類及創(chuàng)建3. 檢查約束(CHECK)(2) 使用命令方式創(chuàng)建約束使用T-SQL語句為已存在的表創(chuàng)建檢查約束,其語法格式如下:ALTER TABLE table_name /*要?jiǎng)?chuàng)建check約束的表名*/Add constraint constraint_name /*check約束的名稱*/Check (logical_expression) /*check約束的

38、邏輯表達(dá)式*/5.6.2約束的種類及創(chuàng)建【例5.21】 為“學(xué)生”表的“性別”字段創(chuàng)建check約束,限制性別只能取值男或女。代碼如下:use student goalter table 學(xué)生 add constraint ck_性別 check (性別=男 or 性別=女)go注意:可以在一列上設(shè)置多個(gè)核查約束,也可以將一個(gè)核查約束應(yīng)用于多列。當(dāng)一列受多個(gè)核查約束控制時(shí),所有的約束按照創(chuàng)建的順序,依次進(jìn)行數(shù)據(jù)有效性的核查。5.6.2約束的種類及創(chuàng)建4. 非空約束(NOT NULL) 非空約束用來強(qiáng)制數(shù)據(jù)的域完整性,它用于設(shè)定某列值不能為空。如果指定某列不能為空,則在進(jìn)行插入記錄時(shí),此列必須要

39、插入數(shù)據(jù)。5.6.2約束的種類及創(chuàng)建5. 默認(rèn)值約束(Default)默認(rèn)約束用來強(qiáng)制數(shù)據(jù)的域完整性,它為表中某列建立一個(gè)默認(rèn)值,當(dāng)用戶插入記錄時(shí),如果沒有為該列提供輸入值,則系統(tǒng)會(huì)自動(dòng)將默認(rèn)值賦給該列。默認(rèn)值可以是常量、內(nèi)置函數(shù)或表達(dá)式。使用默認(rèn)約束可以提高輸入記錄的速度。5.6.2約束的種類及創(chuàng)建5. 默認(rèn)值約束(Default)通過窗口方式創(chuàng)建默認(rèn)值約束的方法比較簡(jiǎn)單,如要將“學(xué)生”表的“性別”設(shè)置默認(rèn)值為男,打開學(xué)生表設(shè)計(jì)器,選中要設(shè)置的列,在表設(shè)計(jì)器的下面【列屬性】中找到【默認(rèn)值或綁定】,設(shè)置默認(rèn)的值男即可。設(shè)置好后若性別字段不錄入值,則默認(rèn)為男。如圖5.28所示。圖5.28 默認(rèn)值

40、約束設(shè)置窗口5.6.2約束的種類及創(chuàng)建5. 默認(rèn)值約束(Default) 使用T-SQL語句為已存在的表創(chuàng)建默認(rèn)約束,語法格式如下: ALTER TABLE table_name ADD CONSTRAINT constraint_name DEFAULT constant_expression FOR column_name其中: table_name:需要建立默認(rèn)約束的表名。 constraint_name:默認(rèn)約束名稱。 constant_expression:默認(rèn)值。5.6.2約束的種類及創(chuàng)建【例5.22】為“學(xué)生”表的“性別”字段創(chuàng)建默認(rèn)值為男的約束,代碼如下:use student

41、 goalter table 學(xué)生 add constraint df_性別 default 男 for 性別go5.6.2約束的種類及創(chuàng)建6. 外鍵約束(Foreign Key) 外鍵是指一個(gè)表中的一列或列組合,它雖不是該表的主鍵,但卻是另一個(gè)表的主鍵。通過外鍵約束可以為相關(guān)聯(lián)的兩個(gè)表建立聯(lián)系,實(shí)現(xiàn)數(shù)據(jù)的引用完整性,維護(hù)兩表之間數(shù)據(jù)的一致性關(guān)系。5.6.2約束的種類及創(chuàng)建6. 外鍵約束(Foreign Key)外鍵約束要求外鍵列中的每個(gè)值都存在于或依賴于對(duì)應(yīng)主鍵表的值。外鍵約束不僅可以與另一張表上的主鍵約束建立聯(lián)系,也可以與另一張表上的UNIQUE約束建立聯(lián)系。外鍵約束上允許存在為NULL的

42、值,則針對(duì)該列的外鍵約束核查將被忽略。外鍵同時(shí)也限制了對(duì)主鍵所在表的數(shù)據(jù)進(jìn)行修改。當(dāng)主鍵所在的表的數(shù)據(jù)被另一張表的外鍵所引用時(shí),用戶將無法對(duì)主鍵里的數(shù)據(jù)進(jìn)行修改或刪除。除非事先刪除或修改引用的數(shù)據(jù)。當(dāng)一個(gè)新的數(shù)據(jù)加入到表格中,或?qū)Ρ砀裰幸呀?jīng)存在的外鍵上的數(shù)據(jù)進(jìn)行修改時(shí),新的數(shù)據(jù)必須存在于另一張表的主鍵上。5.6.2約束的種類及創(chuàng)建6. 外鍵約束(Foreign Key)如在“student”數(shù)據(jù)庫中,其表結(jié)構(gòu)如圖5.29所示:圖5.29 student數(shù)據(jù)庫表結(jié)構(gòu)圖“系部”表中 “代碼”字段是主鍵。“專業(yè)”表的“系部代碼”字段同“系部”的“代碼”相對(duì)應(yīng),不是主鍵?!皩I(yè)”表的“系部代碼”是外鍵

43、?!皩I(yè)”的“系部代碼”和“系部”的“代碼”字段是對(duì)應(yīng)和依賴關(guān)系,外鍵體現(xiàn)了表和表之間的關(guān)系。5.6.2約束的種類及創(chuàng)建6. 外鍵約束(Foreign Key)(1) 使用窗口方式創(chuàng)建外鍵圖5.30 創(chuàng)建外鍵關(guān)系菜單窗口 圖5.31 添加外鍵關(guān)系窗口圖5.32 關(guān)系的主鍵、外鍵設(shè)置窗口 圖5.33 外鍵關(guān)系設(shè)置完成窗口5.6.2約束的種類及創(chuàng)建6. 外鍵約束(Foreign Key)(1) 使用窗口方式創(chuàng)建外鍵注意: 由于外鍵描述的是表和表之間的參照、依賴、對(duì)應(yīng)關(guān)系,因此在“學(xué)生”表“班級(jí)代碼”創(chuàng)建為外鍵后,在“班級(jí)”表的表設(shè)計(jì)器中同樣可以看到該外鍵約束。 外鍵默認(rèn)的命令方式是“FK_從表(外

44、鍵表)_主表(主鍵表)”的形式,“從表”是該外鍵字段所在的表,主表是對(duì)應(yīng)主鍵所在的表。如“FK_學(xué)生_班級(jí)”,表示在學(xué)生表中的“班級(jí)代碼”字段上建立外鍵,該字段依賴于或參照“班級(jí)”表中的“代碼”字段。 通過窗口方式創(chuàng)建外鍵約束更簡(jiǎn)單的方法是使用數(shù)據(jù)庫關(guān)系圖。數(shù)據(jù)庫關(guān)系圖可以從整體的角度查看和設(shè)置表及表的關(guān)系。操作方法如下。打開“student”數(shù)據(jù)庫,右擊【數(shù)據(jù)庫關(guān)系圖】節(jié)點(diǎn),在彈出窗口中選擇【新建數(shù)據(jù)庫關(guān)系圖】,如圖5.34所示。5.6.2約束的種類及創(chuàng)建6. 外鍵約束(Foreign Key)(1) 使用窗口方式創(chuàng)建外鍵5.6.2約束的種類及創(chuàng)建6. 外鍵約束(Foreign Key)(1

45、) 使用窗口方式創(chuàng)建外鍵圖5.34 新建數(shù)據(jù)庫關(guān)系圖菜單窗口5.6.2約束的種類及創(chuàng)建6. 外鍵約束(Foreign Key)(1) 使用窗口方式創(chuàng)建外鍵打開【添加表】窗口,如圖5.35所示:圖5.35 添加表窗口5.6.2約束的種類及創(chuàng)建6. 外鍵約束(Foreign Key)(1) 使用窗口方式創(chuàng)建外鍵依次選擇要添加的表,點(diǎn)擊【添加】,如圖5.36所示:圖5.36 建立數(shù)據(jù)庫關(guān)系圖窗口5.6.2約束的種類及創(chuàng)建6. 外鍵約束(Foreign Key)(1) 使用窗口方式創(chuàng)建外鍵可以看到“班級(jí)”和“學(xué)生”之間有一條線連接起來,這就是前面創(chuàng)建的外鍵關(guān)系。外鍵一端用“”符號(hào),主鍵一端用鑰匙符號(hào)。

46、接下來創(chuàng)建“專業(yè)”表的“系部代碼”為外鍵,同“系部”表的“代碼”對(duì)應(yīng)。具體做法如下:選中“專業(yè)”表的“系部代碼”字段,而后用鼠標(biāo)拖動(dòng),鼠標(biāo)箭頭右下方會(huì)出現(xiàn)“+”,同時(shí)還會(huì)隨著鼠標(biāo)的移動(dòng)拖出一條虛線,如圖5.37所示。圖5.37 拖動(dòng)設(shè)置主外鍵關(guān)聯(lián)窗口5.6.2約束的種類及創(chuàng)建6. 外鍵約束(Foreign Key)(1) 使用窗口方式創(chuàng)建外鍵拖動(dòng)到“系部”表的“代碼”字段上放開鼠標(biāo),彈出兩個(gè)窗口,如圖5.38。圖5.38 主外鍵關(guān)聯(lián)設(shè)置窗口 可以看到【表和列】窗口中的表和鍵,核對(duì)無誤后點(diǎn)擊【確定】返回【外鍵關(guān)系】窗口,點(diǎn)擊【確定】返回【數(shù)據(jù)庫關(guān)系圖】界面,可以看到在“專業(yè)”和“系部”之間出現(xiàn)了

47、一條外鍵關(guān)系連接線。同樣的方法設(shè)置“班級(jí)”表的“專業(yè)代碼”同“專業(yè)”表的“代碼”是外鍵關(guān)系。如圖5.39所示。5.6.2約束的種類及創(chuàng)建6. 外鍵約束(Foreign Key)(1) 使用窗口方式創(chuàng)建外鍵 其體現(xiàn)的含義是應(yīng)先有系部,再有該系部的專業(yè),進(jìn)而該專業(yè)的班級(jí),最后是該班級(jí)的學(xué)生。 最后單擊【保存】,在出現(xiàn)的窗口中輸入關(guān)系圖的名稱,【確定】即可。圖5.39 主外鍵設(shè)置關(guān)聯(lián)效果顯示窗口5.6.2約束的種類及創(chuàng)建6. 外鍵約束(Foreign Key)(2) 使用命令方式創(chuàng)建外鍵可以在create table中完成創(chuàng)建外鍵,如例5.23。5.6.2約束的種類及創(chuàng)建【例5.23】在創(chuàng)建“學(xué)生”

48、表時(shí)就設(shè)置“班級(jí)代碼”字段為外鍵約束的代碼如下:use student -使用student數(shù)據(jù)庫,表示要在student數(shù)據(jù)庫中創(chuàng)建表gocreate table 學(xué)生 -創(chuàng)建學(xué)生表( 學(xué)號(hào) char(12) CONSTRAINT PK_學(xué)生 PRIMARY KEY, -設(shè)置學(xué)號(hào)為主鍵 姓名 varchar(8) not null, 性別 char(2) not null, 出生日期 datetime null, 班級(jí)代碼 char(9) not null constraint fk_學(xué)生_班級(jí)references 班級(jí)(代碼) -設(shè)置班級(jí)代碼為外鍵 )go也可用alter table在已存在的表上創(chuàng)建外鍵,語法格式如下:Alter table table_nameAdd constraint constraint_nameForeign key (column_name,)References ref_table (ref_column_name,) /*主鍵表及列*/5.6.2約束的種類及創(chuàng)建【例5.23】在

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論