數(shù)據(jù)庫(kù)基礎(chǔ)知識(shí)_第1頁(yè)
數(shù)據(jù)庫(kù)基礎(chǔ)知識(shí)_第2頁(yè)
數(shù)據(jù)庫(kù)基礎(chǔ)知識(shí)_第3頁(yè)
數(shù)據(jù)庫(kù)基礎(chǔ)知識(shí)_第4頁(yè)
數(shù)據(jù)庫(kù)基礎(chǔ)知識(shí)_第5頁(yè)
已閱讀5頁(yè),還剩10頁(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ù)基礎(chǔ)知識(shí)數(shù)據(jù)庫(kù)的作用:數(shù)據(jù)是數(shù)據(jù)庫(kù)中存儲(chǔ)的基本對(duì)象。包括:文字、圖形、圖像、聲音、有組織的、可共享的數(shù)據(jù)集合。常用的DBMSMYSQL(oracle、Sun)oracle(oracle)SQL-Server(Microsoft)DB2(IBM)..如何學(xué)習(xí)數(shù)據(jù)庫(kù)管理系統(tǒng).程序員1、 標(biāo)準(zhǔn)語(yǔ)言:SQL(結(jié)構(gòu)化查詢(xún)語(yǔ)言)SQL是用于訪(fǎng)問(wèn)數(shù)據(jù)庫(kù)的最常用標(biāo)準(zhǔn)化語(yǔ)言,他是由ANSI/ISOSQL標(biāo)準(zhǔn)定義的SQL的分類(lèi)DML:數(shù)據(jù)操作語(yǔ)言(用于檢索或者修改數(shù)據(jù))DDL:數(shù)據(jù)定義語(yǔ)言(用于定義數(shù)據(jù)的結(jié)構(gòu),比如創(chuàng)建、修改或者刪除數(shù)據(jù)庫(kù)的對(duì)象)DCL:數(shù)據(jù)控制語(yǔ)言(用于定義數(shù)據(jù)庫(kù)用戶(hù)的權(quán)限)DML:select:用于檢索數(shù)據(jù)insert:用于增加數(shù)據(jù)到數(shù)據(jù)庫(kù)update:用于從數(shù)據(jù)庫(kù)中修改現(xiàn)存的數(shù)據(jù)delete:用于從數(shù)據(jù)庫(kù)中刪除數(shù)據(jù)DDL:createtable〃創(chuàng)建表alter//修改表droptable//刪除表createindex〃創(chuàng)建索引dropindex〃刪除索引createview〃創(chuàng)建視圖dropview〃刪除視圖DCL:grant//授權(quán)revoke//撤銷(xiāo)授權(quán)set//設(shè)置2、 不同數(shù)據(jù)庫(kù)的獨(dú)特管理方式.DBA(DatabaseAdministrator)1、 標(biāo)準(zhǔn)語(yǔ)言:SQL(結(jié)構(gòu)化查詢(xún)語(yǔ)言)2、 不同數(shù)據(jù)庫(kù)的獨(dú)特管理方式3、 數(shù)據(jù)庫(kù)的調(diào)優(yōu)4、 精通數(shù)據(jù)庫(kù)的備份、回復(fù)機(jī)制MYSQL的安裝與配置安裝:選擇普通安裝類(lèi)型.配置1、 選擇配置類(lèi)型:DetailedConfiguration2、 選擇服務(wù)器類(lèi)型:DeveloperMachine3、 選擇數(shù)據(jù)庫(kù)的是使用情況:--多功能數(shù)據(jù)庫(kù)(MultifunctionalDatabase)--只是事務(wù)處理數(shù)據(jù)庫(kù)(TransactionalDatabaseOnly)--只是非事務(wù)處理數(shù)據(jù)庫(kù)(Non-TransactionalDatabaseOnly)4、 InnoDB表空間文件存儲(chǔ)的盤(pán)符,默認(rèn)在c:\5、 數(shù)據(jù)庫(kù)并發(fā)連接數(shù)配置:Decisionsupport6、 MYSQL服務(wù)器端口:默認(rèn):33067、 EnableStrictMode:是否允許嚴(yán)格樣式檢查:取消8、 選擇字符編碼:手工選擇:gb2312,windows下中文支持9、 服務(wù)器默認(rèn)安裝到windows系統(tǒng)服務(wù)中,默認(rèn)服務(wù)自啟動(dòng),選擇自動(dòng)配置環(huán)境變量10、 填寫(xiě)數(shù)據(jù)庫(kù)管理系統(tǒng)的管理員密碼--在mySQL中數(shù)據(jù)庫(kù)管理員的用戶(hù)名為:root11、 是否允許使用root用戶(hù)遠(yuǎn)程登錄數(shù)據(jù)庫(kù)12、 測(cè)試配置是否正確c:\>c:\mysql\bin\mysqlshowMYSQL的登錄.開(kāi)始--運(yùn)行--cmd.輸入:mysql-uroot-p,然后輸入密碼.或者:mysql-uroot-p密碼.退出quit或<\q--不必全在一個(gè)行內(nèi)給出一個(gè)命令,較長(zhǎng)命令可以輸入到多個(gè)行中。mysql通過(guò)尋找終止分號(hào)而不是輸入行的結(jié)束來(lái)決定語(yǔ)句在哪兒結(jié)束->等待多行命令的下一行'>等待下一行,等待以單引號(hào)開(kāi)始的字符串結(jié)束如果你決定不想執(zhí)行正在輸入過(guò)程中的一個(gè)命令,輸入—'c取消它能夠以大小寫(xiě)輸入關(guān)鍵詞,結(jié)果是等價(jià)的基本的SQL語(yǔ)句倉(cāng)U建數(shù)據(jù)庫(kù)---createdatabaseschool;查看有哪些數(shù)據(jù)庫(kù)--showdatabases;刪除數(shù)據(jù)庫(kù)---dropdatabaseschool;向數(shù)據(jù)庫(kù)中存儲(chǔ)數(shù)據(jù)1、首先進(jìn)入數(shù)據(jù)庫(kù)usedbname;use類(lèi)似quit,不需要一個(gè)分號(hào),寫(xiě)也無(wú)礙use必須在一個(gè)單行上給出2、 查看數(shù)據(jù)庫(kù)中的表showtables;3、 在數(shù)據(jù)庫(kù)中創(chuàng)建表createtablestudent(namevarchar(20),ageint,sexchar(2));4、 向表中插入數(shù)據(jù)---insertintodbnamevalues('張三’,18,‘男’);5、 查看表中所有的數(shù)據(jù)--select*fromstudent;只查看姓名和年齡---selectname,agefromstudent;常用的數(shù)據(jù)類(lèi)型char(M)固定長(zhǎng)度字符用來(lái)表示固定長(zhǎng)度字符串,字符串的長(zhǎng)度是1-255VARCHAR(M)可變長(zhǎng)度字符具有靈活性的字符數(shù)據(jù)類(lèi)型,范圍:1-255處理char類(lèi)型的數(shù)據(jù)比varchar類(lèi)型的數(shù)據(jù)要快,有時(shí)會(huì)快50%(char類(lèi)型存儲(chǔ)的數(shù)據(jù)的長(zhǎng)度是聲明變量時(shí)的固定長(zhǎng)度,而不管數(shù)據(jù)的實(shí)際長(zhǎng)度,varchar存儲(chǔ)的是按數(shù)據(jù)的實(shí)際長(zhǎng)度,從而減小了數(shù)據(jù)文件的大?。﹊nt整數(shù)有符合的范圍:-2147483648到2147483647,無(wú)符號(hào)范圍:0到4294967295其他常用的數(shù)據(jù)類(lèi)型DATE---日期類(lèi)型,顯示‘YYYY-MM-DD’DATETIME--日期和時(shí)間的組合,顯示‘YYYY-MM-DDHH:MM:SS'TEXT/BLOB文本和大對(duì)象TEXT可以保存字符串的長(zhǎng)度在255-65535字節(jié)內(nèi)。BLOB是一個(gè)能保存二進(jìn)制數(shù)據(jù)的大對(duì)象,區(qū)別是TEXT不區(qū)分大小寫(xiě),而B(niǎo)LOB區(qū)分大小寫(xiě)。SQL語(yǔ)句的導(dǎo)入1、 編寫(xiě)SQL腳本(.sql)2、 導(dǎo)入mysql-uusername-p<***.sql&練習(xí):&老師表:teacher&姓名,性別,年齡,課程導(dǎo)出sql月腳本---mysqldumpstu-uroot-p>abc.sql查看表的結(jié)構(gòu) desctablename修改表中的數(shù)據(jù)---updatetablenamesetcolname=valuewhere條件刪除數(shù)據(jù)——deletefromteacherwhereage=?刪除表中所有數(shù)據(jù)---deletefromteacher;刪除表---droptabletablename根據(jù)條件進(jìn)行過(guò)濾查找---select*fromtablenamewhere條件查找出版社為“清華出版社”的所有書(shū)籍---select*frombookswherepub‘清華出版社’;查找出庫(kù)存大于50的所有書(shū)籍---select*frombookswherestore>50;查找出“西游記”的庫(kù)存量---selecttitle,storefrombookswheretitle=‘西游記’;SQL運(yùn)算符>大于<小于>=大于等于。小于等于!=,<>不等于查看數(shù)據(jù)庫(kù)的信息----\smysql常用函數(shù)1、 查看數(shù)據(jù)庫(kù)版本---selectversin();計(jì)算機(jī)的時(shí)間是存在BIOS()2、 查看當(dāng)前數(shù)據(jù)庫(kù)的日期----selectcurrent_date();3、 查看當(dāng)前數(shù)據(jù)庫(kù)時(shí)間----selectnow();4、 查看當(dāng)前連接數(shù)據(jù)庫(kù)的用戶(hù)---selectuser();localhost:代表是本機(jī)createtableuser(idint,namevarchar(20),birdate,deadatetime);insertintouservalues(1,'zhangsan',now(),now());or和and查詢(xún)or(滿(mǎn)足一個(gè)條件)and(都需要滿(mǎn)足)查找學(xué)生EQ為80分或90分的學(xué)生select*fromstuwhereEQ=80orEQ=90;查找學(xué)生EQ為90分并且性別為女的學(xué)生select*fromstuwhereEQ=90andsex=女';in(x,x)返回條件中的記錄與or作用相似select*fromtablenamewhere條件in(,);between‘’and‘’返回兩者之間的記錄查詢(xún)年齡在20-30之間的所有學(xué)生select*fromstuwhereagebetween20and30;like與通配符(%)一起使用,模糊查詢(xún)查找出姓張的學(xué)生select*fromstuwherenamelike‘張%’;查詢(xún)出使用163郵箱的所有學(xué)生select*fromstuwhereemaillike‘3.com’;查詢(xún)出郵箱里面含有a的所有學(xué)生select*fromstuwhereemaillike‘%a%’;orderby實(shí)現(xiàn)排序(從小到大)--asc將學(xué)生的年齡從高到低排列select*fromstuorderbyagedesc;(降序)將學(xué)生的年齡從低到高排列select*fromstuorderbyageasc;(升序)數(shù)據(jù)默認(rèn)為升序(從低到高)select*fromstuorderbyage;as為查詢(xún)的列起別名1、 查詢(xún)所有學(xué)生只列出姓名,年齡,性別selectnameas'姓名',ageas'年齡',sexas'性別'fromstu;groupby對(duì)于查詢(xún)出的數(shù)據(jù)結(jié)果進(jìn)行分類(lèi)(分組)2、 將學(xué)生按性別進(jìn)行分類(lèi)select*fromstugroupbysex;將學(xué)生按年齡進(jìn)行分類(lèi)select*fromstugroupbyage;3、 having子查詢(xún):對(duì)于where查詢(xún)出的結(jié)果再次進(jìn)行查詢(xún)查找出年齡大于20歲學(xué)生,并且在其中找出姓名等于xxx的學(xué)生select*fromstuwhereage>20havingname='xxx或select*fromstuwhereage>20andname='xxx'4、 distinct過(guò)濾查詢(xún)的重復(fù)型記錄,只顯示唯一的記錄將學(xué)生性別過(guò)濾selectdistinct(sex)fromstu;count查看表中有幾條數(shù)據(jù)selectcount(*)fromstu;selectcount(distinct(sex))fromstu;limit限制查詢(xún)結(jié)果的輸出數(shù)量同時(shí)也可以實(shí)現(xiàn)數(shù)據(jù)的分頁(yè)查詢(xún)EQ前三名的學(xué)生select*fromstuorderbyEQdesclimit3;實(shí)現(xiàn)查詢(xún)記錄的分頁(yè)select*fromstulimit0,3;select*fromstulimit3,3;約束----定義了表級(jí)的強(qiáng)制規(guī)則、數(shù)據(jù)的完整性非空約束(notnull)createtabletest(idintnotnull);insertintotestvalues();innodb會(huì)報(bào)錯(cuò),myISAM會(huì)整形默認(rèn)以0填充唯一約束(UNIQUE)不允許列中的數(shù)據(jù)重復(fù)createtabletest(idint,unique(id));insertintotestvalues(1);默認(rèn)約束(default)createtabletest(idintnotnulldefault'111111');insertintotestvalues();主鍵約束(primarykey)是一個(gè)字段或一組字段(組合鍵),用于唯一標(biāo)識(shí)表中的記錄,它可以確保每個(gè)記錄是唯一的。createtabletest(idint,primarykey(id));insertintotestvaluse(1);id主鍵自增,減createtabletest(idint,namevarchar(20),primarykey(id));insertintotestva山es(1,'張安');auto_increment的特點(diǎn) 自增值當(dāng)刪除某一值時(shí),他不會(huì)自動(dòng)填充,而是繼續(xù)自增1createtabletest(idintnotnullauto_increment,namevarchar(20),primarykey(id));insertintotest(name)values('xxx');創(chuàng)建一個(gè)有合理約束的表createtablepeople(idintnotnullauto_increment,namevarchar(20)notnull,ageintnotnull,sexchar(2)notnull,pcodevarchar(50),telvarchar(50),emailvarchar(50),primarykey(id));insertintopeople(name,age,sex,email)values(張三',‘28’,‘男’,'abc@163.com');查詢(xún)出所有學(xué)生的檔案信息select*fromstudent,schoolwherestudent.daih=school.id;或select*fromstudentasa,schoolasbwherea.daih=b.id;查詢(xún)所有學(xué)生檔案信息只需顯示:學(xué)生姓名,年齡。畢業(yè)學(xué)校,學(xué)校地址select,student.age,,school.addressfromstudent,schoolwherestudent.daih=school.id;或select,a.age,,b.addressfromstudentasa,schoolasbwherea.daih=b.id;夕卜鍵約束(foreignkey)如何創(chuàng)建外鍵foreignkey定義子中的列為外鍵references標(biāo)記外鍵所要參考的父表和列ondeletecascade:允許在刪除父表的列的同時(shí),刪除子表的列//在InnoDB中支持createdatebasefordb;usefordb;創(chuàng)建父表createtableschool(idintnotnullauto_increment,namevarchar(20),primarykey(id))engine=innodb;insertintoschool(name)values('紫瑯學(xué)院');創(chuàng)建子表createtablestudent(idintnotnullauto_increment,namevarchar(20),schoolidint,primarykey(id),foreignkey(schoolid)referencesschool(id)ondeletecascade);insertintostudent(name,schoolid)values('張三',1);E-R模型概述:設(shè)計(jì)數(shù)據(jù)庫(kù)時(shí),通常采用"實(shí)體關(guān)系模型“--E-R模型軟件開(kāi)發(fā)流程:需求調(diào)研(設(shè)計(jì)功能,收集數(shù)據(jù))與最終用戶(hù)進(jìn)行確定數(shù)據(jù)庫(kù)的設(shè)計(jì)控制多余數(shù)據(jù)那么在最后,數(shù)據(jù)庫(kù)設(shè)計(jì)者確定表、不同表之間的關(guān)系以及每個(gè)表之間的關(guān)系,通常使用”E-R模型“,它將整個(gè)系統(tǒng)看作彼此相關(guān)的實(shí)體組成實(shí)體:通常用于表示能夠被清晰識(shí)別的人、地點(diǎn)、事物、對(duì)象、事件實(shí)體關(guān)系圖:如果需要基于‘E-R’模型建立數(shù)據(jù)庫(kù)模型,需要標(biāo)識(shí)實(shí)體,實(shí)體的屬性、以及實(shí)體之間的關(guān)系。那么通常用‘E-R'圖來(lái)表示實(shí)體之間的三種類(lèi)型:1:11:N或N:1M:N數(shù)據(jù)庫(kù)設(shè)計(jì)員確定的實(shí)體被轉(zhuǎn)換為表,而其屬性則成為相應(yīng)表中的字段(列)如何控制冗余數(shù)據(jù):一般來(lái)說(shuō)通過(guò)數(shù)據(jù)庫(kù)的范式理論設(shè)計(jì)數(shù)據(jù)庫(kù)的范式來(lái)控制冗余共有五個(gè)范式,一般達(dá)到第三范式即可第一范式:對(duì)于表中的每一行,必須且僅僅有唯一的行值,在一行中的每一列僅有唯一的值并且具有原子性第二范式:要求非主鍵列是主鍵的子集,非主鍵列活動(dòng)必須完全依賴(lài)整個(gè)主鍵。主鍵必須有唯一性的元素,一個(gè)主鍵可以由一個(gè)或更多的組成唯一值的列組成。一旦創(chuàng)建,主鍵無(wú)法改變,外鍵關(guān)聯(lián)一個(gè)表的主鍵。主外鍵關(guān)聯(lián)意味著一對(duì)多的關(guān)系。第三范式:要求非主鍵列互不依賴(lài)第四范式:禁止主鍵列和非主鍵列一對(duì)多關(guān)系不受約束第五范式:將表分割成盡可能小的塊,為了排除在表中所有的冗余MYSQL的聚合函數(shù)1、 最大值找出EQ最高的學(xué)生selectname,eqfromstudentwhereeq=(selectmax(EQ)fromstudent);SELECTMAX(article)ASarticleFROMshop;2、 最小值找出EQ最低的學(xué)生selectname,min(EQ)fromstudent;count()〃統(tǒng)計(jì)查詢(xún)出的記錄總數(shù)3、 查詢(xún)出學(xué)生的總條數(shù)selectcount(name)fromstudent;avg()〃求平均值4、 查詢(xún)學(xué)生EQ的平均值selectavg(EQ)fromstudent;sum()〃求和5、 查詢(xún)學(xué)生EQ的總和selectsum(EQ)fromstu;修改字段類(lèi)型altertablestudentmodifysexchar(5);增加列altertablestudentaddaddressvarchar(50);刪除列altertablestudentdropaddress;修改列的名稱(chēng)altertablestudentchangenamenamesvarchar(20);修改表的名字renametablestudenttostu;MYSQL之表連接內(nèi)鏈接(innerjoin):又為等值連接,因?yàn)樗麑蓚€(gè)表中的公共字段有相等的值(記錄)連接起來(lái),這是最常用的連接。一個(gè)表引用還被稱(chēng)為查詢(xún)顯示:訂單編號(hào),顧客姓名,物品名稱(chēng)selectcases.id,,fromcases,user,goodswherecases.user_id=user.idandcases.goods_id=goods.id;或selectcases.id,,fromcasesinnerjoin(user,goods)on(user.id=cases.user_idandgoods.id=cases.goods_id);或selectcases.id,,from(casesinnerjoinuseroncases.user_id=user.id)innerjoingoodsoncases.goods_id=goods.id;或selectcases.id,,fromuserinnerjoin(casesinnerjoingoodsoncases.goods_id=goods.id)onuser.id=cases.user_id);左連接:顯示sql語(yǔ)句中l(wèi)eftjoin左邊表中的所有記錄,即使在leftjoin右邊的表中沒(méi)有滿(mǎn)足連接條件的數(shù)據(jù)也被顯示。當(dāng)滿(mǎn)足連接條件時(shí),leftjoin右邊的表中的相應(yīng)的記錄與leftjoin左邊表中的相應(yīng)記錄結(jié)合顯示。查詢(xún)出:學(xué)生的編號(hào),學(xué)生姓名,學(xué)生學(xué)校select,student.id,fromstudentleftjoinschoolonstudent.school_id=school.id;右連接:與左連接相對(duì)應(yīng),他顯示sql語(yǔ)句中rightjoin右邊表中的記錄,即使在rightjoin左邊沒(méi)有的記錄也被顯示。當(dāng)滿(mǎn)足條件時(shí)。rightjoin左邊表中相應(yīng)記錄將與rightjoin右邊的表中相應(yīng)記錄進(jìn)行結(jié)合顯示。通常左連接和右連接顯示的內(nèi)容是一樣的。select,student.id,fromstudentrightjoinschoolonstudent.school_id=school.id;leftjoin以左邊的表查詢(xún)?yōu)橹鱮ightjoin以右邊的表查詢(xún)?yōu)橹魇纠簊tudentleftjoinschool那么student就為左表。school就為由表MYSQL之視圖視圖:它可以訪(fǎng)問(wèn)一個(gè)或多個(gè)表中的數(shù)據(jù),是從一個(gè)或多個(gè)表中派生出的數(shù)據(jù)對(duì)象(虛表)視圖的特點(diǎn):1、 將復(fù)雜的查詢(xún)簡(jiǎn)單化2、 提供安全機(jī)制,它保證用戶(hù)只可以看得到的數(shù)據(jù),系統(tǒng)中真實(shí)的表是不可被存取的(現(xiàn)都支持更改數(shù)據(jù))創(chuàng)建視圖:createviewcase_viewasselectcases.idas'訂單編號(hào)',as'顧客姓名',as'物品名稱(chēng)'fromuserinnerjoin(casesinnerjoingoodsoncases.goods_id=goods.id)onuser.id=cases.user_id;注意點(diǎn):視圖屬于數(shù)據(jù)庫(kù),在默認(rèn)情況下,將在當(dāng)前數(shù)據(jù)庫(kù)創(chuàng)建新視圖。要想在給定數(shù)據(jù)庫(kù)中明確創(chuàng)建視圖。創(chuàng)建時(shí),應(yīng)將名稱(chēng)指定為db_name.view_namemysql>createviewtest.vasselect*fromt;視圖必須具有唯一的列名,不得有重復(fù),就像基表那樣。修改視圖:alterviewviewnameasSQL;刪除視圖:dropviewviewname;alterviewcase_viewasselectcases.idas'編號(hào)',as'姓名',as'名稱(chēng)'fromuserinnerjoin(casesinnerjoingoodsoncases.goods_id=goods.id)onuser.id=cases.user_id;數(shù)據(jù)字典數(shù)據(jù)庫(kù)的數(shù)據(jù)字典---實(shí)際上是一個(gè)數(shù)據(jù)庫(kù)它記錄著數(shù)據(jù)庫(kù)管理系統(tǒng)中的其他數(shù)據(jù)庫(kù)的操作mysql數(shù)據(jù)庫(kù)字典:information_schemauseinformation_schemaselect*fromviews;MYSQL的事務(wù)與引擎什么是事務(wù)(transaction)所謂事務(wù),它是一個(gè)操作序列。這些操作要么都執(zhí)行,要么都不執(zhí)行,他是一個(gè)不可分割的工作單位事務(wù)是數(shù)據(jù)庫(kù)維護(hù)數(shù)據(jù)一致性的單位,在每個(gè)事務(wù)結(jié)束時(shí),都能保持?jǐn)?shù)據(jù)一致性mysql表類(lèi)型:在mysql中有多種表的類(lèi)型,但是分為兩類(lèi):事務(wù)類(lèi)型:innoDB、BDB非事務(wù)類(lèi)型:MYISAM、MERGE、MEMORY(HEAP)InnoDB和BDB存儲(chǔ)引擎提供事務(wù)安全表。BDB被包含在mac支持它的操作系統(tǒng)發(fā)布的mysql-max二制分發(fā)版里。InnoDB也默認(rèn)被包括在所有mysql5.1二進(jìn)制分發(fā)版里InnoDB是為處理巨大數(shù)據(jù)量時(shí)的最大性能設(shè)計(jì)。它的cpu效率可能是任何其他基于磁盤(pán)的關(guān)系數(shù)據(jù)庫(kù)引擎所有不能匹敵的。MYISAM管理非事務(wù)表。他提供高速存儲(chǔ)和檢索,以及全文搜索能力。ISAM數(shù)據(jù)表是mysql最原始的數(shù)據(jù)表,有三個(gè)文件,分別是:.frm,存放數(shù)據(jù)表的結(jié)構(gòu)定義.isd,數(shù)據(jù)文件,存放數(shù)據(jù)表中的各個(gè)數(shù)據(jù)行的內(nèi)容.ism,索引文件,存放數(shù)據(jù)表的所有索引信息。MYISAM是數(shù)據(jù)表是ISAM數(shù)據(jù)表的繼承者,也是三個(gè)文件,分別是:.frm,結(jié)構(gòu)定義文件;.MYD,數(shù)據(jù)文件;.MYI,索引文件。BDB數(shù)據(jù)表用兩個(gè)文件來(lái)表示,分別是;.frm,結(jié)構(gòu)定義文件.DB,數(shù)據(jù)表數(shù)據(jù)和索引文件INNODB:由于采用表空間的概念來(lái)管理數(shù)據(jù)表,所以他只有一個(gè)與數(shù)據(jù)表對(duì)應(yīng).frm文件,同一目錄下的其他文件表示為空間,存儲(chǔ)數(shù)據(jù)表的數(shù)據(jù)和索引HEAP數(shù)據(jù)表是一個(gè)存在與內(nèi)存中的表,所以他的數(shù)據(jù)和索引都存在于內(nèi)存中,文件系統(tǒng)中只有一個(gè).frm文件,及定義結(jié)構(gòu),當(dāng)mysql關(guān)閉后數(shù)據(jù)都將消失。定義表的的類(lèi)型createtabletest(idint)engine=heap;事務(wù)表幣非事務(wù)表有幾大優(yōu)勢(shì):更安全。即使mysql崩潰或遇到硬件問(wèn)題,要么自動(dòng)恢復(fù),要么從備份加事務(wù)日志恢復(fù),你可以取回?cái)?shù)據(jù)你可以合并許多語(yǔ)句,并用commit語(yǔ)句同時(shí)接受她們?nèi)浚ㄈ绻鸻utocommit被禁止掉)你可以執(zhí)行rollback來(lái)忽略你的改變(如果autocommit被禁止掉)如果更新失敗,你的所有改變都變回原來(lái)。(用非事務(wù)安全表,所有發(fā)生的改變都是永久的)事務(wù)安全存儲(chǔ)引擎可以給那些當(dāng)前用讀得到許多更新的表提供更好的部署。非事務(wù)表自身有幾大優(yōu)點(diǎn):非事務(wù)表自身有幾大優(yōu)點(diǎn),因?yàn)闆](méi)有事務(wù)開(kāi)支,所有優(yōu)點(diǎn)都能出現(xiàn):更快需要更更少的磁盤(pán)空間執(zhí)行更新需要更少的內(nèi)存你可以在同一個(gè)語(yǔ)句中合并事務(wù)安全和非事務(wù)安全表來(lái)獲得兩者最好的情況。盡管如此,在autocommit被禁止掉的事務(wù)里,變換到非事務(wù)安全表依舊即使提交并且不會(huì)被回滾如何在innodb中實(shí)現(xiàn)事務(wù):begin://告知服務(wù)器我要開(kāi)始一個(gè)事物rollback://如果事務(wù)發(fā)生異常,那么數(shù)據(jù)回滾commit://事務(wù)執(zhí)行成功,進(jìn)行數(shù)據(jù)提交mysql>begin;QueryOK,0rowsaffected(0.00sec)mysql>insertintotest11values(1,'zhangs');QueryOK,1rowaffected(0.00sec)mysql>select*fromtest11;TOC\o"1-5"\h\z+ 1 +|id|name|+ 1 +|1|zhangs|+ 1 +1rowinset(0.00sec)mysql>end;ERROR1064(42000):YouhaveanerrorinyourSQLsyntax;checkthemanualthatcorrespondstoyourMySQLserverversionfortherightsyntaxtousenear'end'atline1mysql>rollback;QueryOK,0rowsaffected(0.00sec)mysql>select*fromtest11;Emptyset(0.00sec)mysql>commit;QueryOK,0rowsaffected(0.00sec)mysql>select*fromtest11;Emptyset(0.00sec)修改表類(lèi)型sql語(yǔ)句:altertabletablenameengine=innodb;注意:不可以將mysql系統(tǒng)表比如‘user’或‘host’轉(zhuǎn)換成innodb類(lèi)型。系統(tǒng)表必須為myisam類(lèi)型對(duì)myisam進(jìn)行事務(wù)處理---鎖locktabletablename(read,write)locktable可以對(duì)表進(jìn)行加鎖控制,以保證用戶(hù)并發(fā)訪(fǎng)問(wèn)時(shí)非事務(wù)表的數(shù)據(jù)一致性u(píng)nlocktables釋放鎖mysql之index(索引)什么是索引?索引被用來(lái)快速找出在一個(gè)列上用一特定值的行。沒(méi)有索引,mysql不得不首先以第一條記錄開(kāi)始并然后讀完整個(gè)表直到他找出相關(guān)的行,表越大,花費(fèi)時(shí)間越多。如果表對(duì)于查詢(xún)的列有一個(gè)索引,mysql能快速到達(dá)一個(gè)位置去搜尋到數(shù)據(jù)文件的中間,沒(méi)有必要考慮所有數(shù)據(jù)。索引的作用:快速找出匹配一個(gè)where子句的行當(dāng)執(zhí)行連接時(shí),從其他表檢索行對(duì)特定的索引列找出max()或min()值mysql中的索引:索引實(shí)際上是一個(gè)分離的列表,具有一個(gè)指向全表的指針myisam表,索引被存儲(chǔ)為分離文件innodb,索引存儲(chǔ)為表空間的一部分mysql有四種類(lèi)型的索引:主鍵(primarykey)>唯一索引(unique)、全文索引(fullindex)、普通索引(index)創(chuàng)建index1、 createindexindexnameontablename(columnname);indexname(索引名稱(chēng))tablename(表名稱(chēng))columnname(要?jiǎng)?chuàng)建索引的字段名稱(chēng))2、 altertabletablenameaddindexindexname(columnname);查看索引----showkeysfromtablename;刪除index--altertabletablenamedropindexindexname;fullindex(myisam支持)createtablechat(idint,chat1text,chat2text);createfulltextindexindex_textontablename(col1,col2);altertabletablenameaddfulltext(col1,col2);高效使用索引:太多的索引,占用空間每次進(jìn)行插入或更新時(shí),索引都必須針對(duì)變化重新排序,會(huì)導(dǎo)致很多額外負(fù)擔(dān)何處使用索引?1、where從句中條件匹配的行selectnamefromstudentwherecommentlike“a%”;comment域的索引就起到了作用Explain分析索引語(yǔ)法:explainselectagefromtest12;Explain分析mysql中的索引:table:查詢(xún)中涉及的表type:顯示連接中使用了何種類(lèi)型const(最好),eq_ref,fef,range,index和allpossible_keys:可能用到的索引key:實(shí)際使用的索引,可以在select語(yǔ)句中使用useindex(indexname)來(lái)強(qiáng)制使用索引,用ignoreindex(indexname)來(lái)強(qiáng)制忽略索引key_len:使用的索引長(zhǎng)度,越短越好;ref(references):顯示索引哪一列被使用了rows:mysql必須檢查用來(lái)返請(qǐng)求數(shù)據(jù)的行數(shù)extra:usingtemporary(需要臨時(shí)表來(lái)存儲(chǔ)結(jié)果,通常發(fā)生在對(duì)不同的列集進(jìn)行orderby),usigfilesort意即mysql根本不能使用索引索引的算法:btreebitmap使用索引注意的事項(xiàng);1、合理創(chuàng)建索引,反之會(huì)降低數(shù)據(jù)庫(kù)的查詢(xún)效率,反之創(chuàng)建的索引會(huì)失去意義。mysql的備份方式:backup、restore、copy//冷備份、mysqldump、selectintobackup備份myisam表的示例:>usetest;>backuptablechatto'c:\\db_backup';只生成.frm和.myd,可以在數(shù)據(jù)庫(kù)恢復(fù)后重建索引>droptablechat;>restoretablechatfrom'c:\\db_backup';copy備份1、停止mysql服務(wù)器一避免在備份的時(shí)候有用戶(hù)進(jìn)行數(shù)據(jù)庫(kù)的訪(fǎng)問(wèn)1、復(fù)制數(shù)據(jù)庫(kù)的文件夾用mysqldump備份備份庫(kù)1、 備份#mysqldump-uroot-pdbname>xxxname.sql再打開(kāi)查看(創(chuàng)建表備份的sql語(yǔ)句)2、 恢復(fù)#mysql-uroot-pdbname<>備份某個(gè)表1、 備份#mysqldump-uroot-pdbnametablename>xxxname.sql再打開(kāi)文件進(jìn)行查看(創(chuàng)建表備份的sql語(yǔ)句)2、 恢復(fù)#mysql-uroot-pdbname<>用selectinto備份備份:mysql>select*fromtablenameintooutfile'c:\\db_backup\table.dat'刪除表:mysql>deletefromtablename;恢復(fù):mysql>loaddatainfile'c:\\db_backup\table.dat'intotabletablename;作業(yè):1、 唯一索引2、 全文索引要求:理解她們的意思及用途,以及實(shí)驗(yàn)3、 selectinto備份MYSQL其他客戶(hù)端工具查看數(shù)據(jù)庫(kù)中有哪些數(shù)據(jù)庫(kù)mysqlshow-uroot-p查看數(shù)據(jù)庫(kù)中有哪些表mysqlshow-uroot-pdbname查看數(shù)據(jù)庫(kù)中表的結(jié)構(gòu)mysqlshow-uroot-pdbnametablenamemysqlcheck客戶(hù)端可以檢查和修復(fù)myisam表,他還可以?xún)?yōu)化和分析表1、 mysqlcheck-uroot-pdbname//檢測(cè)2、 mysqlcheck-uroot-p--auto-repairdbname〃如碰到有問(wèn)題的表自動(dòng)進(jìn)行修復(fù)3、mysqlcheck-uroot-p--optimize//優(yōu)化表MYSQL管理方式連接方式----mysql-hlocalhost-uroot通過(guò)本地主機(jī),以root用戶(hù)訪(fǎng)問(wèn),無(wú)需密碼驗(yàn)證mysql-hlocalhost通過(guò)本地主機(jī),匿名用戶(hù)訪(fǎng)問(wèn),無(wú)需密碼驗(yàn)證設(shè)置密碼 mysqladmin夕卜部:1、 修改密碼--mysqladminhlocalhost-uroot-ppassword"newpassword"2、 密碼為空--mysqladmin-hlocalhost-uroot-ppassword""3、 設(shè)置root用戶(hù)遠(yuǎn)程訪(fǎng)問(wèn)密碼--mysqladmin-hremote-uroot-ppassword""內(nèi)部設(shè)置密碼:1、 設(shè)置root用戶(hù)本地登錄密碼setpasswordfor'root'@'localhost'=password('000000');2、 設(shè)置root用戶(hù)遠(yuǎn)程登錄密碼setpasswordfor'root'@'remote'=password('newpassword');加密:mysql>usestartDatabasechangedmysql>createtableusers(usernamevarchar(50),passwordvarchar(50));QueryOK,0rowsaffected(0.16sec)mysql>insertintousersvalues('abcd','123456');QueryOK,1rowaffected(0.34sec)mysql>insertintousersvalues('abcdfg',password('123456'));QueryOK,1rowaffected(0.00sec)mysql>select*fromusers;selectuser,host,password

溫馨提示

  • 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)論