版權(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度離婚糾紛調(diào)解員專(zhuān)業(yè)培訓(xùn)合同
- 2025年度智能量化股票投資買(mǎi)賣(mài)委托合同范本
- 2025年度建筑業(yè)勞動(dòng)合同模板:項(xiàng)目管理人員專(zhuān)用
- 2025年度個(gè)人耐用消費(fèi)品貸款合同范本及還款條款
- 2025年度光伏電站項(xiàng)目設(shè)計(jì)咨詢(xún)服務(wù)合同模板
- 2025年度水電安裝與設(shè)備采購(gòu)一體化合同
- 2025年度中小企業(yè)信用擔(dān)保貸款合同范本
- 2025年度建筑工程保證擔(dān)保服務(wù)合同范本
- 2025年度環(huán)保運(yùn)輸服務(wù)公司貨物配送合同
- 2025年度秸稈生物質(zhì)顆粒燃料購(gòu)銷(xiāo)合同
- 語(yǔ)言和語(yǔ)言學(xué)課件
- 《工作場(chǎng)所安全使用化學(xué)品規(guī)定》
- 裝飾圖案設(shè)計(jì)-裝飾圖案的形式課件
- 2022年菏澤醫(yī)學(xué)專(zhuān)科學(xué)校單招綜合素質(zhì)考試筆試試題及答案解析
- 護(hù)理學(xué)基礎(chǔ)教案導(dǎo)尿術(shù)catheterization
- ICU護(hù)理工作流程
- 廣東版高中信息技術(shù)教案(全套)
- 市政工程設(shè)施養(yǎng)護(hù)維修估算指標(biāo)
- 短視頻:策劃+拍攝+制作+運(yùn)營(yíng)課件(完整版)
- 石家莊鐵道大學(xué)四方學(xué)院畢業(yè)設(shè)計(jì)46
- 分布式光伏屋頂調(diào)查表
評(píng)論
0/150
提交評(píng)論