數(shù)據(jù)庫(kù)實(shí)驗(yàn)工作報(bào)告總結(jié)多篇_第1頁(yè)
數(shù)據(jù)庫(kù)實(shí)驗(yàn)工作報(bào)告總結(jié)多篇_第2頁(yè)
數(shù)據(jù)庫(kù)實(shí)驗(yàn)工作報(bào)告總結(jié)多篇_第3頁(yè)
數(shù)據(jù)庫(kù)實(shí)驗(yàn)工作報(bào)告總結(jié)多篇_第4頁(yè)
數(shù)據(jù)庫(kù)實(shí)驗(yàn)工作報(bào)告總結(jié)多篇_第5頁(yè)
已閱讀5頁(yè),還剩2頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

數(shù)據(jù)庫(kù)實(shí)驗(yàn)工作報(bào)告總結(jié)多篇

試驗(yàn)內(nèi)容

1、數(shù)據(jù)表的建立

基本表《簡(jiǎn)潔的》帶有主鍵

帶有外碼約束的(外碼來(lái)自其他表或者本表)

2、數(shù)據(jù)表的修改

添加刪除列

修改列屬性類(lèi)型

添加刪除約束(約束名)

元組的添加,修改,刪除

刪除數(shù)據(jù)表

試驗(yàn)過(guò)程

1、createtablestudent

(

snochar(9)primarykey,/*sno是主碼列級(jí)完整性約束條件*/

snamechar(20)unique,/*sname取唯一值*/

ssexchar(2),

sagesmallint,/*類(lèi)型為smallint*/

sdeptchar(20)/*所在系*/

);

createtablecourse

(

cnochar(4)primarykey,/*列級(jí)完整性約束條件,cno是主碼*/

cnamechar(40),

cpnochar(4),/*cpno的含義是先行課*/

ccreditsmallint,

foreignkey(cpno)referencescourse(cno)

/*表級(jí)完整性約束條件,cpno是外碼,被參照表是course,被參照列是cno*/

);

createtablesc

(

snochar(9),

cnochar(4),

gradesmallint,

primarykey(sno,cno),

/*主碼有兩個(gè)屬性構(gòu)成,必需作為表級(jí)完整性進(jìn)行定義*/

foreignkey(sno)referencesstudent(sno),

/*表級(jí)完整性約束條件,sno是外碼,被參照表是student*/

foreignkey(cno)referencescourse(cno),

/*表級(jí)完整性約束條件,cno是外碼,被參照表示course*/

);

例1、createtables

(

cnovarchar(3),/*變長(zhǎng)的字符串,輸入2個(gè)字符就是兩個(gè)字符不會(huì)補(bǔ)空格*/

snamevarchar(20),

statusint,

cityvarchar(20),

constraintpk_snoprimarykey(sno),/*約束條件的名字為pk_sno*/

);

createtablep

(

pnovarchar(3),

pnamevarchar(20),

colorvarchar(3),

weightint,

constraintpk_pnoprimarykey(pno),/*約束條件的名字是pk_pno*/

);

createtablej

(

jnovarchar(3),

jnamevarchar(20),

cityvarchar(20),

constraintpk_jnoprimarykey(jno)/*約束條件的名字為pk_jno*/

);

例2、createtablespj

(

snovarchar(3),/*第一個(gè)表中的主碼*/

pnovarchar(3),

jnovarchar(3),

qtyint,/*數(shù)量*/

constraintpk_spjprimarykey(sno,pno,jno),/*主碼由3個(gè)屬性組成*/

foreignkey(sno)referencess(sno),

/*表級(jí)完整性約束條件,sno是外碼,被參照表是s*/

foreignkey(pno)referencesp(pno),

/*表級(jí)完整性約束條件,pno是外碼,被參照表是p*/

foreignkey(jno)referencesj(jno),

/*表級(jí)完整性約束條件,jno是外碼,被參照表是j*/

);

2、數(shù)據(jù)表的更改

在s表中添加一個(gè)concat列

altertablesaddconcatvarchar(20)

在s表中刪除concat列

altertablesdropcolumnconcat

更改s表concat列的屬性把長(zhǎng)度由20改為30

altertablesaltercolumnconcatvarchar(30)

聯(lián)系方式名字為concat修改屬性為唯一的屬性名為con_concat

altertablesaddconstraintcon_concatunique(concat)

刪除約束關(guān)系con_concat

altertablesdropconstraintcon_concat

/*插入一個(gè)元組*/

insertintosvalus(‘s1’,’精益’,20,’天津’)/*20不能寫(xiě)成’20’*/

試驗(yàn)中的問(wèn)題的排解與總結(jié):

1、在創(chuàng)建spj時(shí)

有三個(gè)實(shí)體所以從3個(gè)實(shí)體中取主碼,還有一個(gè)數(shù)量屬性也要寫(xiě)上

主碼由那3個(gè)主碼確定

2、更改一個(gè)數(shù)據(jù)庫(kù)中數(shù)據(jù)表時(shí)肯定要先使該數(shù)據(jù)庫(kù)處于正在使用狀態(tài)

3、constraint

是可選關(guān)鍵字,表示primarykey、notnull、unique、foreignkey或check約束定義的開(kāi)頭。約束是特別屬性,用于強(qiáng)制數(shù)據(jù)完整性并可以為表及其列創(chuàng)建索引。

4、--go可以不加但是要留意挨次注:go--解釋提示錯(cuò)誤

5、留意添加一個(gè)空元素用null

附sql備份

--創(chuàng)建一個(gè)數(shù)據(jù)庫(kù)student

createdatabasestudent

go

--在數(shù)據(jù)庫(kù)student中創(chuàng)建表studentcoursesc留意挨次

usestudent

----------------------------------------------------------------

createtablestudent

(

snochar(9)primarykey,/*sno是主碼列級(jí)完整性約束條件*/

snamechar(10)unique,/*sname取唯一值*/

ssexchar(2),

sagesmallint,/*類(lèi)型為smallint*/

sdeptchar(20)/*所在系*/

);/*;要加*/

-----------

數(shù)據(jù)庫(kù)試驗(yàn)總結(jié)【二】

我在sqlserver索引基礎(chǔ)學(xué)問(wèn)系列中,第一篇就講了記錄數(shù)據(jù)的基本格式。那里主要講解的是,數(shù)據(jù)庫(kù)的最小讀存單元:數(shù)據(jù)頁(yè)。一個(gè)數(shù)據(jù)頁(yè)是8k大小。

對(duì)于數(shù)據(jù)庫(kù)來(lái)說(shuō),它不會(huì)每次有一個(gè)數(shù)據(jù)頁(yè)變化后,就存到硬盤(pán)。而是變化達(dá)到肯定數(shù)量級(jí)后才會(huì)作這個(gè)操作。這時(shí)候,數(shù)據(jù)庫(kù)并不是以數(shù)據(jù)頁(yè)來(lái)作為操作單元,而是以64k的數(shù)據(jù)(8個(gè)數(shù)據(jù)頁(yè),一個(gè)區(qū))作為操作單元。

區(qū)是管理空間的基本單位。一個(gè)區(qū)是八個(gè)物理上連續(xù)的頁(yè)(即64kb)。這意味著sqlserver數(shù)據(jù)庫(kù)中每mb有16個(gè)區(qū)。

為了使空間安排更有效,sqlserver不會(huì)將全部區(qū)安排給包含少量數(shù)據(jù)的表。sqlserver有兩種類(lèi)型的區(qū):

統(tǒng)一區(qū),由單個(gè)對(duì)象全部。區(qū)中的全部8頁(yè)只能由所屬對(duì)象使用。

混合區(qū),最多可由八個(gè)對(duì)象共享。區(qū)中八頁(yè)的每頁(yè)可由不同的對(duì)象全部。

通常從混合區(qū)向新表或索引安排頁(yè)。當(dāng)表或索引增長(zhǎng)到8頁(yè)時(shí),將變成使用統(tǒng)一區(qū)進(jìn)行后續(xù)安排。假如對(duì)現(xiàn)有表創(chuàng)建索引,并且該表包含的行足以在索引中生成8頁(yè),則對(duì)該索引的全部安排都使用統(tǒng)一區(qū)進(jìn)行。

為何會(huì)這樣呢?

其實(shí)很簡(jiǎn)潔:

讀或?qū)?kb的時(shí)間與讀或?qū)?4kb的時(shí)間幾乎相同。

在8kb到64kb范圍之內(nèi),單個(gè)磁盤(pán)i/o傳輸操作所花的時(shí)間主要是磁盤(pán)取數(shù)臂和讀/寫(xiě)磁頭運(yùn)動(dòng)的時(shí)間。

因此,從數(shù)學(xué)上來(lái)講,當(dāng)需要傳輸64kb以上的sql數(shù)據(jù)時(shí),

盡可能地執(zhí)行64kb磁盤(pán)傳輸是有益的,即分成數(shù)個(gè)64k的操作。

由于64kb傳輸基本上與8kb傳輸一樣快,而每次傳輸?shù)膕qlserver數(shù)據(jù)是8kb傳輸?shù)?8倍。

我們通過(guò)一個(gè)實(shí)例來(lái)看有and操作符時(shí)候的最常見(jiàn)的一種狀況。我們有下面一個(gè)表,

createtable[dbo].[member]([member_no][dbo].[numeric_id]identity(1,1)notnull,[lastname][dbo].[shortstring]notnull,[firstname][dbo].[shortstring]notnull,[middleinitial][dbo].[letter]null,[street][dbo].[shortstring]notnull,[city][dbo].[shortstring]notnull,[state_prov][dbo].[statecode]notnull,[country][dbo].[countrycode]notnull,[mail_code][dbo].[mailcode]notnull,[phone_no][dbo].[phonenumber]null,[photograph][image]null,[issue_dt][datetime]notnulldefault(getdate()),[expr_dt][datetime]notnulldefault(dateadd(year,1,getdate())),[region_no][dbo].[numeric_id]notnull,[corp_no][dbo].[numeric_id]null,[Pv_balance][money]nulldefault(0),[curr_balance][money]nulldefault(0),[member_code][dbo].[status_code]notnulldefault())

這個(gè)表具備下面的四個(gè)索引:

索引名細(xì)節(jié)索引的列

member_corporation_linknonclusteredlocatedonprimarycorp_no

member_identclustered,unique,primarykeylocatedonprimarymember_no

member_region_linknonclusteredlocatedonprimaryregion_no

memberfirstnamenonclusteredlocatedonprimaryfirstname

當(dāng)我們執(zhí)行下面的sql查詢(xún)時(shí)候,

selectm.member_no,m.firstname,m.region_nofromdbo.memberasmwherem.firstnamelikek%andm.region_no6andm.member_no5000go

sqlserver會(huì)依據(jù)索引方式,優(yōu)化成下面方式來(lái)執(zhí)行。

selecta.member_no,a.firstname,b.region_nofrom(selectm.member_no,m.firstnamefromdbo.memberasmwherem.firstnamelikek%andm.member_no5000)a,--這個(gè)查詢(xún)可以直接使用memberfirstname非聚集索引,而且這個(gè)非聚集索引掩蓋了全部查詢(xún)列--實(shí)際執(zhí)行時(shí),只需要規(guī)律讀取3次

(selectm.member_no,m.region_nofromdbo.memberasmwherem.region_no6)b

--這個(gè)查詢(xún)可以直接使用member_region_link非聚集索引,而且這個(gè)非聚集索引掩蓋了全部查詢(xún)列--實(shí)際執(zhí)行時(shí),只需要規(guī)律讀取10次

wherea.member_no=b.member_no

不信,你可以看這兩個(gè)sql的執(zhí)行方案,以及規(guī)律讀信息,都是一樣的。

其實(shí)上面的sql,假如優(yōu)化成下面的方式,實(shí)際的規(guī)律讀消耗也是一樣的。為何sqlserver不會(huì)優(yōu)化成下面的方式。是由于and操作符優(yōu)化的另外一個(gè)原則。

1/26的數(shù)據(jù)和1/6的數(shù)據(jù)找交集的速度要比1/52的數(shù)據(jù)和1/3的數(shù)據(jù)找交集速度要慢。

selecta.member_no,a.firstname,b.region_nofrom(selectm.member_no,m.firstnamefromdbo.memberasmwherem.firstnamelikek%--1/26數(shù)據(jù))a,

(selectm.member_no,m.region_nofromdbo.memberasmwherem.region_no6andm.member_no5000--1/3*1/2數(shù)據(jù))bwherea.member_no=b.member_no

當(dāng)然,我們要學(xué)習(xí)sql如何優(yōu)化的話,就會(huì)用到查詢(xún)語(yǔ)句中的一個(gè)功能,指定查詢(xún)使用哪個(gè)索引來(lái)進(jìn)行。

比如下面的查詢(xún)語(yǔ)句

selectm.member_no,m.firstname,m.region_nofromdbo.memberasmwith(index(0))wherem.firstnamelikek%andm.region_no6andm.member_no5000go

selectm.member_no,m.firstname,m.region_nofromdbo.memberasmwith(index(1))wherem.firstnamelikek%andm.region_no6andm.member_no5000goselectm.member_no,m.firstname,m.region_nofromdbo.memberasmwith(index(membercovering3))wherem.firstnamelikek%andm.region_no6andm.member_no5000goselectm.member_no,m.firstname,m.region_nofromdbo.memberasmwith(index(memberfirstname,member_region_link))wherem.firstnamelikek%andm.region_no6andm.member_no5000go

這里index計(jì)算符可以是0,1,指定的一個(gè)或者多個(gè)索引名字。對(duì)于0,1的意義如下:

假如存在聚集索引,則index(0)強(qiáng)制執(zhí)行聚集索引掃描,index(1)強(qiáng)制執(zhí)行聚集索引掃描或查找(使用性能最高的一種)。

假如不存在聚集索引,則index(0)強(qiáng)制執(zhí)行表掃描,index(1)被解釋為錯(cuò)誤。

總結(jié)學(xué)問(wèn)點(diǎn):

簡(jiǎn)潔來(lái)說(shuō),我們可以這么理解:sqlserver對(duì)于每一條查詢(xún)語(yǔ)句。會(huì)依據(jù)實(shí)際索引狀況(sysindexes系統(tǒng)表中存儲(chǔ)這些信息),分析每種組合可能的成本。然后選擇它認(rèn)為成本最小的一種。作為它實(shí)際執(zhí)行的方案。

成本代價(jià)計(jì)算的一個(gè)主要組成部分是規(guī)律i/o的數(shù)量,特殊是對(duì)于單表的查詢(xún)。

and操作要滿(mǎn)意全部條件,這樣,常常會(huì)要求對(duì)幾個(gè)數(shù)據(jù)集作交集。數(shù)據(jù)集越小,數(shù)據(jù)集的交集計(jì)算越節(jié)約成本。

的項(xiàng)目中,竟然消失了濫用聚集索引的問(wèn)題。看來(lái)沒(méi)有培訓(xùn)最最基礎(chǔ)的索引的意義,代價(jià),使用場(chǎng)景,是一個(gè)特別大的失誤。這篇博客就是從這個(gè)角度來(lái)排列索引的基礎(chǔ)學(xué)問(wèn)。

使用索引的意義

索引在數(shù)據(jù)庫(kù)中的作用類(lèi)似于名目在書(shū)籍中的作用,用來(lái)提高查找信息的速度。

使用索引查找數(shù)據(jù),無(wú)需對(duì)整表進(jìn)行掃描,可以快速找到所需數(shù)據(jù)。

使用索引的代價(jià)

索引需要占用數(shù)據(jù)表以外的物理存儲(chǔ)空間。

創(chuàng)建索引和維護(hù)索引要花費(fèi)肯定的時(shí)間。

當(dāng)對(duì)表進(jìn)行更新操作時(shí),索引需要被重建,這樣降低了數(shù)據(jù)的維護(hù)速度。

創(chuàng)建索引的列

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
  • 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ì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論