一、一對(duì)一
一張表的一條記錄一定只能與另外一張表的一條記錄進(jìn)行對(duì)應(yīng)栏账,反之亦然帖族。
有時(shí)候,為了業(yè)務(wù)挡爵,或者避免一張表中數(shù)據(jù)量過(guò)大竖般,過(guò)復(fù)雜,在開(kāi)發(fā)中會(huì)進(jìn)行一對(duì)一方式來(lái)設(shè)計(jì)表茶鹃。
二涣雕、 一對(duì)多(1方建主表(id為主鍵字段), 多方建外鍵字段)
一個(gè)實(shí)體的某個(gè)數(shù)據(jù)與另外一個(gè)實(shí)體的多個(gè)數(shù)據(jù)有關(guān)聯(lián)關(guān)系, 一對(duì)多的關(guān)系在設(shè)計(jì)的時(shí)候闭翩,需要設(shè)計(jì)表的外鍵挣郭。
2.1. 班級(jí)表和學(xué)生表設(shè)計(jì)
部門(mén)表和員工表設(shè)計(jì)
2.2.創(chuàng)建數(shù)據(jù)庫(kù)表
constraint 約束
foreign key就是表與表之間的某種約定的關(guān)系,由于這種關(guān)系的存在疗韵,能夠讓表與表之間的數(shù)據(jù)兑障,更加的完整,關(guān)連性更強(qiáng)蕉汪。
foreign key語(yǔ)句的式例:FOREIGN KEY(Sno) REFERENCES Student(Sno)
注意:表的外鍵必須是另一張表的主鍵
補(bǔ)一個(gè)外鍵的注意(默認(rèn)是約束): 刪除主鍵信息時(shí)旺垒,當(dāng)該主鍵字段值在外鍵表中存在時(shí),該記錄是不能刪除的肤无。---要把外鍵表是的相關(guān)信息刪除之后,才能刪除骇钦。
子查詢:嵌套在其他查詢中的查詢宛渐。
4.3、多對(duì)多( 3個(gè)表= 2個(gè)實(shí)體表 + 1個(gè)關(guān)系表 )
一個(gè)實(shí)體的數(shù)據(jù)對(duì)應(yīng)另外一個(gè)實(shí)體的多個(gè)數(shù)據(jù)眯搭,另外實(shí)體的數(shù)據(jù)也同樣對(duì)應(yīng)當(dāng)前實(shí)體的多個(gè)數(shù)據(jù)窥翩。
一個(gè)學(xué)生可以有多個(gè)老師,一個(gè)老師可以教多個(gè)學(xué)生
解決方案:創(chuàng)建一個(gè)中間表鳞仙,專(zhuān)門(mén)用來(lái)維護(hù)多表之間的對(duì)應(yīng)關(guān)系寇蚊,通常是能夠唯一標(biāo)識(shí)出數(shù)據(jù)的字段(主鍵)
五、 聯(lián)表查詢
分類(lèi):內(nèi)連接棍好、外連接仗岸、交叉連接
5.1. 初始定義表結(jié)構(gòu)
5.2.交叉查詢
交叉查詢允耿,又叫笛卡爾積查詢,會(huì)將左表和右表的信息扒怖,做一個(gè)乘積將所有信息查詢出來(lái)较锡,會(huì)產(chǎn)生臨時(shí)表,比較占用內(nèi)存盗痒,生成的記錄數(shù)=表1 X表2
5.3. 內(nèi)連接查詢
內(nèi)連接蚂蕴,inner join on 查詢兩張表,設(shè)定條件俯邓,將兩張表中對(duì)應(yīng)的數(shù)據(jù)查詢出來(lái)
不會(huì)產(chǎn)生笛卡爾積骡楼,不會(huì)產(chǎn)生臨時(shí)表,性能高
5.4. 左外連接
左外連接? left join on 設(shè)定條件稽鞭,將兩張表對(duì)應(yīng)的數(shù)據(jù)查詢出來(lái)鸟整,同時(shí)將左表自己沒(méi)有關(guān)聯(lián)的數(shù)據(jù)也查詢出來(lái)
注意:join前面是左,后面是右
5.5. 右外連接
右外連接 right join? on 設(shè)定條件川慌,將兩張表對(duì)應(yīng)的數(shù)據(jù)查詢出來(lái)吃嘿,同時(shí)將右表自己沒(méi)有關(guān)聯(lián)的所有數(shù)據(jù)查詢出來(lái)
5.6. 聯(lián)合查詢
六、MySQL圖形化工具navicat
6.1.? Navicat簡(jiǎn)介
Navicat是一款桌面版MySQL數(shù)據(jù)庫(kù)管理和開(kāi)發(fā)工具梦重。和微軟SQLServer的管理器很像兑燥,簡(jiǎn)單、易學(xué)易用琴拧。Navicat使用圖形化的用戶界面降瞳,可以讓用戶使用和管理更為輕松,同時(shí)支持中文蚓胸。
????2. 安裝步驟:
下載破解版Navicat for MySQ中文破解版
鏈接:https://pan.baidu.com/s/1YK9U9opCUt1TthZvYxKBhg
提取碼:mjw1
解壓下載后的文件有兩個(gè).exe文件挣饥,點(diǎn)navicat111_mysql_cs_x64.exe 進(jìn)行安裝
安裝完成之后點(diǎn)PatchNavicat.exe選擇安裝Navicat for MySQL目錄下的navicat.exe
出現(xiàn) 下圖破解成功
????6.2 SQLyog
SQLyog中文版是一款專(zhuān)業(yè)的圖形管理軟件,SQLyog操作簡(jiǎn)單沛膳,功能強(qiáng)大扔枫,能夠幫助用戶輕松管理自己的MYSQL數(shù)據(jù)庫(kù),SQLyog中文版支持多種數(shù)據(jù)格式導(dǎo)出锹安,可以快速幫助用戶備份和恢復(fù)數(shù)據(jù)短荐,還能夠快速地運(yùn)行SQL腳本文件,為用戶的使用提供便捷叹哭。官網(wǎng)
3. MySQL Workbench
MySQL Workbench是一款專(zhuān)為MySQL設(shè)計(jì)的ER/數(shù)據(jù)庫(kù)建模工具忍宋。它是著名的數(shù)據(jù)庫(kù)設(shè)計(jì)工具DBDesigner4的繼任者》缯郑可以用MySQL Workbench設(shè)計(jì)和創(chuàng)建新的數(shù)據(jù)庫(kù)圖示糠排,建立數(shù)據(jù)庫(kù)文檔,以及進(jìn)行復(fù)雜的MySQL 遷移超升。MySQL Workbench是下一代的可視化數(shù)據(jù)庫(kù)設(shè)計(jì)入宦、管理的工具哺徊,它同時(shí)有開(kāi)源和商業(yè)化的兩個(gè)版本。同時(shí)支持Windows和Linux系統(tǒng)云石。官網(wǎng)
4. MySQL GUI Tools
MySQL GUI Tools是一個(gè)可視化界面的MySQL數(shù)據(jù)庫(kù)管理控制臺(tái)唉工,提供了四個(gè)非常好用的圖形化應(yīng)用程序,方便數(shù)據(jù)庫(kù)管理和數(shù)據(jù)查詢汹忠。MySQL GUI Tools可以極大地提高數(shù)據(jù)庫(kù)管理淋硝、備份、遷移和查詢效率宽菜,即使沒(méi)有豐富的SQL語(yǔ)言基礎(chǔ)的用戶也可以應(yīng)用自如谣膳。這款圖形化管理工具算是最老牌的管理工具了。
5. MySQL Connector/ODBC
MySQL Connector/ODBC 有時(shí)也可以叫做MyODBC铅乡,用戶可以通過(guò)ODBC (Open Database Connectivity继谚,開(kāi)放數(shù)據(jù)庫(kù)互聯(lián))數(shù)據(jù)庫(kù)連接Mysql的服務(wù)器。比如說(shuō)可以使用Windows或者Unix平臺(tái)中的應(yīng)用程序阵幸,如微軟的 Access花履、Excel和Borland的Delphi去連接數(shù)據(jù)庫(kù)服務(wù)器。MySQL Connector/ODBC 是MySQL官方提供的挚赊,系統(tǒng)安裝了這個(gè)程序之后诡壁,就可以通過(guò)ODBC來(lái)訪問(wèn)MySQL,這樣就可以實(shí)現(xiàn)SQLServer荠割、Access和MySQL之間的數(shù)據(jù)轉(zhuǎn)換妹卿,還可以支持ASP訪問(wèn)MySQL數(shù)據(jù)庫(kù)。官網(wǎng)
6. phpMyAdmin
phpMyAdmin是最常用的MySQL維護(hù)工具蔑鹦,是一個(gè)用PHP開(kāi)發(fā)的基于Web方式架構(gòu)在網(wǎng)站主機(jī)上的MySQL管理工具夺克,支持中文,管理數(shù)據(jù)庫(kù)非常方便嚎朽。是windows中PHP開(kāi)發(fā)軟件的標(biāo)配铺纽。不足之處在于對(duì)大數(shù)據(jù)庫(kù)的備份和恢復(fù)不太方便。官網(wǎng)
7. MySQLDumper
MySQLDumper使用PHP開(kāi)發(fā)的MySQL數(shù)據(jù)庫(kù)備份恢復(fù)程序哟忍,解決了使用PHP進(jìn)行大數(shù)據(jù)庫(kù)備份和恢復(fù)的問(wèn)題室囊,數(shù)百兆的數(shù)據(jù)庫(kù)都可以方便的備份恢復(fù),不用擔(dān)心網(wǎng)速太慢導(dǎo)致中間中斷的問(wèn)題魁索,非常方便易用。這個(gè)軟件是德國(guó)人開(kāi)發(fā)的盼铁,還沒(méi)有中文語(yǔ)言包粗蔚。官網(wǎng)
6.3. Navicat工具使用步驟
6.3.1. 鏈接,mysql饶火,輸入用戶名鹏控,密碼
6.3.2.新建庫(kù)致扯,鼠標(biāo)點(diǎn)擊右鍵
6.3.3.新建表
七、數(shù)據(jù)庫(kù)備份與恢復(fù)
1. 使用圖形界面工具:
2. 使用doc命令:
mysqldump –u用戶名 –p密碼 數(shù)據(jù)庫(kù)名>生成的腳本文件路徑
注意当辐,不要打分號(hào)抖僵,不要登錄mysql,直接在cmd下運(yùn)行
注意缘揪,生成的腳本文件中不包含create database語(yǔ)句
mysqldump -uroot -proot host>C:\Users\Administrator\Deskt
op\mysql\1.sql
3. 導(dǎo)入SQL文件
導(dǎo)入文件
刷新即可耍群,F(xiàn)5刷新
4.恢復(fù)
a)使用圖形界面工具:
b)使用doc命令行:
i.不登錄恢復(fù)
mysql -u用戶名 -p密碼 數(shù)據(jù)庫(kù)<腳本文件路徑
注意,不要打分號(hào)找筝,不要登錄mysql蹈垢,直接在cmd下運(yùn)行
ii.登錄之后恢復(fù)
選擇庫(kù) use 庫(kù)名稱(chēng)
Source sql文件路徑
八、數(shù)據(jù)庫(kù)常用性能優(yōu)化(了解)
數(shù)據(jù)庫(kù)性能優(yōu)化這塊袖裕,我們考慮比較多的還是查詢這塊曹抬,互聯(lián)網(wǎng)項(xiàng)目對(duì)數(shù)據(jù)查詢非常頻繁,對(duì)效率急鳄,性能要求比較高谤民。
查詢這塊優(yōu)化的話,主要就需要使用索引這種方式疾宏,所謂索引就是建立一種快速查找的方式张足,比如我們查字典,有一個(gè)ABCD的索引.
舉個(gè)例子,如果我們創(chuàng)建一個(gè)表create table user(id integer ,name varchar(20),job varchar(20));如果我們數(shù)據(jù)庫(kù)中有1000萬(wàn)條數(shù)據(jù)灾锯,當(dāng)我查詢select * from user where name=’張三’的時(shí)候,這種查詢方式就類(lèi)似于整個(gè)數(shù)據(jù)庫(kù)的掃描兢榨,效率非常低。
我們可以給這個(gè)name設(shè)置一個(gè)索引create index n on user (name);這是設(shè)置一種普通(normal)索引顺饮,然后我們查詢的時(shí)候吵聪,有了這個(gè)索引,效率就會(huì)大大提升兼雄,當(dāng)然對(duì)于索引吟逝,它的方式有BTree類(lèi)型和Hash類(lèi)型,是兩種管理數(shù)據(jù)庫(kù)索引的方式赦肋,這個(gè)我沒(méi)有深入研究块攒。這個(gè)我們可以自己設(shè)置。默認(rèn)是btree佃乘。
索引類(lèi)型的話囱井,有normal(普通類(lèi)型)類(lèi)型、unique(唯一類(lèi)型)趣避、fulltext全文索引庞呕、主鍵索引、非空索引、聚集索引住练。
①主鍵索引地啰,primary key 在設(shè)置的時(shí)候,已經(jīng)指定了讲逛,其實(shí)也是非空索引亏吝。
②非空索引是not null,設(shè)置這種方式的該字段下內(nèi)容不能為空,
③聚集索引(聯(lián)合索引)盏混,是在設(shè)置多個(gè)查詢條件的時(shí)候使用宿稀。比如 創(chuàng)建一張表帐我,有名字禽笑,有工作恕洲,我們想經(jīng)常頻繁的用到名字和工作它倆結(jié)合在一起來(lái)查詢數(shù)據(jù)庫(kù)中表的數(shù)據(jù)。這個(gè)時(shí)候图焰,可以將名字和工作指定為聚集索引启盛。create index m on user(name,job); 這樣當(dāng)我們指定select * from user where name=xxx and job=xxx的時(shí)候,就會(huì)按照索引方式來(lái)做技羔。
這種優(yōu)化方式就是索引優(yōu)化僵闯,在使用索引優(yōu)化方案的時(shí)候,我們需要注意避免在索引字段上使用條件函數(shù)等操作藤滥。
了解:
Show index form orders;查看索引
面試題:
為什么要?jiǎng)?chuàng)建索引呢(優(yōu)點(diǎn))鳖粟?
這是因?yàn)椋瑒?chuàng)建索引可以大大提高系統(tǒng)的性能拙绊。
①過(guò)創(chuàng)建唯一性索引向图,可以保證數(shù)據(jù)庫(kù)表中每一行數(shù)據(jù)的唯一性。
②可以大大加快數(shù)據(jù)的檢索速度标沪,這也是創(chuàng)建索引的最主要的原因榄攀。
③可以加速表和表之間的連接,特別是在實(shí)現(xiàn)數(shù)據(jù)的參考完整性方面特別有意義金句。
④在使用分組和排序子句進(jìn)行數(shù)據(jù)檢索時(shí)檩赢,同樣可以顯著減少查詢中分組和排序的時(shí)間。
⑤通過(guò)使用索引违寞,可以在查詢的過(guò)程中贞瞒,使用優(yōu)化隱藏器,提高系統(tǒng)的性能趁曼。
建立方向索引的不利因素(缺點(diǎn))
也許會(huì)有人要問(wèn):增加索引有如此多的優(yōu)點(diǎn)军浆,為什么不對(duì)表中的每一個(gè)列創(chuàng)建一個(gè)索引呢?這種想法固然有其合理性挡闰,然而也有其片面性乒融。雖然,索引有許多優(yōu)點(diǎn),但是簇抵,為表中的每一個(gè)列都增加索引,是非常不明智的射众。這是因?yàn)榈冢黾铀饕灿性S多不利的一個(gè)方面。
①創(chuàng)建索引和維護(hù)索引要耗費(fèi)時(shí)間叨橱,這種時(shí)間隨著數(shù)據(jù)量的增加而增加典蜕。
②索引需要占物理空間,除了數(shù)據(jù)表占數(shù)據(jù)空間之外罗洗,每一個(gè)索引還要占一定的物理空間愉舔,如果要建立聚簇索引,那么需要的空間就會(huì)更大伙菜。
③當(dāng)對(duì)表中的數(shù)據(jù)進(jìn)行增加轩缤、刪除和修改的時(shí)候,索引也要?jiǎng)討B(tài)的維護(hù)贩绕,這樣就降低了數(shù)據(jù)的維護(hù)速度火的。
創(chuàng)建方向索引的準(zhǔn)則
索引是建立在數(shù)據(jù)庫(kù)表中的某些列的上面。因此淑倾,在創(chuàng)建索引的時(shí)候馏鹤,應(yīng)該仔細(xì)考慮在哪些列上可以創(chuàng)建索引,在哪些列上不能創(chuàng)建索引娇哆。
一般來(lái)說(shuō)湃累,應(yīng)該在這些列上創(chuàng)建索引。
①在經(jīng)常需要搜索的列上碍讨,可以加快搜索的速度治力;
②在作為主鍵的列上,強(qiáng)制該列的唯一性和組織表中數(shù)據(jù)的排列結(jié)構(gòu)垄开;
③在經(jīng)常用在連接的列上琴许,這些列主要是一些外鍵,可以加快連接的速度溉躲;
④在經(jīng)常需要根據(jù)范圍進(jìn)行搜索的列上創(chuàng)建索引榜田,因?yàn)樗饕呀?jīng)排序,其指定的范圍是連續(xù)的锻梳;
⑤ 在經(jīng)常需要排序的列上創(chuàng)建索引箭券,因?yàn)樗饕呀?jīng)排序,這樣查詢可以利用索引的排序疑枯,加快排序查詢時(shí)間辩块;
⑥在經(jīng)常使用在WHERE子句中的列上面創(chuàng)建索引,加快條件的判斷速度。
同樣废亭,對(duì)于有些列不應(yīng)該創(chuàng)建索引国章。一般來(lái)說(shuō),不應(yīng)該創(chuàng)建索引的的這些列具有下列特點(diǎn):
①對(duì)于那些在查詢中很少使用或者參考的列不應(yīng)該創(chuàng)建索引豆村。這是因?yàn)橐菏蓿热贿@些列很少使用到,因此有索引或者無(wú)索引掌动,并不能提高查詢速度四啰。相反,由于增加了索引粗恢,反而降低了系統(tǒng)的維護(hù)速度和增大了空間需求柑晒。
②對(duì)于那些只有很少數(shù)據(jù)值的列也不應(yīng)該增加索引。這是因?yàn)榫焐洌捎谶@些列的取值很少匙赞,例如人事表的性別列,在查詢的結(jié)果中凭迹,結(jié)果集的數(shù)據(jù)行占了表中數(shù)據(jù)行的很大比例罚屋,即需要在表中搜索的數(shù)據(jù)行的比例很大。增加索引嗅绸,并不能明顯加快檢索速度脾猛。
③對(duì)于那些定義為text, image和bit數(shù)據(jù)類(lèi)型的列不應(yīng)該增加索引。這是因?yàn)橛沭@些列的數(shù)據(jù)量要么相當(dāng)大猛拴,要么取值很少。
④當(dāng)修改性能遠(yuǎn)遠(yuǎn)大于檢索性能時(shí)蚀狰,不應(yīng)該創(chuàng)建索引愉昆。這是因?yàn)椋薷男阅芎蜋z索性能是互相矛盾的麻蹋。當(dāng)增加索引時(shí)跛溉,會(huì)提高檢索性能,但是會(huì)降低修改性能扮授。當(dāng)減少索引時(shí)芳室,會(huì)提高修改性能,降低檢索性能刹勃。因此堪侯,當(dāng)修改性能遠(yuǎn)遠(yuǎn)大于檢索性能時(shí),不應(yīng)該創(chuàng)建索引荔仁。
九伍宦、數(shù)據(jù)庫(kù)性能檢測(cè)方式(了解)
在設(shè)計(jì)SQL的時(shí)候芽死,我們一般會(huì)使用explain檢測(cè)sql,看是否使用到索引次洼,避免出現(xiàn)整表搜索方式查詢[filesort(不是以索引方式的檢索关贵,我們叫做filesort)](我在這張表中把gender設(shè)置成normal索引,name沒(méi)有任何設(shè)置)
對(duì)比看的卖毁,對(duì)有索引的字段,在檢測(cè)的時(shí)候坪哄,會(huì)顯示是一個(gè)引用的key。
explain select*from tb_product where title='';
還可以使用profiling方式檢測(cè)數(shù)據(jù)庫(kù)執(zhí)行的方式势篡,可以查詢sql的運(yùn)行時(shí)間。http://www.jb51.net/article/31870.htm
注釋?zhuān)翰榭磒rofiling信息模暗,show variables like '%profiling%';
第一步:set profiling=1;(開(kāi)啟profiling)
第二步運(yùn)行:select title from tb_product ;
第三步:查看運(yùn)行時(shí)間show profiles;
Duration:持續(xù)時(shí)間禁悠,事件花費(fèi)的時(shí)間總計(jì)(以毫秒為單位?)
十兑宇、數(shù)據(jù)庫(kù)視圖
10.1 簡(jiǎn)介
視圖是從一個(gè)或幾個(gè)基本表(或視圖)導(dǎo)出的表碍侦。
它與基本表不同,是一個(gè)虛表隶糕。數(shù)據(jù)庫(kù)只存放視圖的定義瓷产,而不存放視圖對(duì)應(yīng)的數(shù)據(jù),這些數(shù)據(jù)仍存放在原來(lái)的基本表中枚驻。
所以基本表中的數(shù)據(jù)發(fā)生變化濒旦,從視圖中查詢出的數(shù)據(jù)也就隨之改變了。
從這個(gè)意義上講再登,視圖就像一個(gè)窗口尔邓,透過(guò)它可以看到數(shù)據(jù)庫(kù)中自己感興趣的數(shù)據(jù)及其變化。
視圖只供查詢锉矢,數(shù)據(jù)不可更改
10.2 視圖的作用:
1梯嗽、視圖隱藏了底層的表結(jié)構(gòu),簡(jiǎn)化了數(shù)據(jù)訪問(wèn)操作沽损,客戶端不再需要知道底層表的結(jié)構(gòu)及其之間的關(guān)系灯节。
2、視圖提供了一個(gè)統(tǒng)一訪問(wèn)數(shù)據(jù)的接口绵估。(即可以允許用戶通過(guò)視圖訪問(wèn)數(shù)據(jù)的安全機(jī)制炎疆,而不授予用戶直接訪問(wèn)底層表的權(quán)限)
3、從而加強(qiáng)了安全性壹士,使用戶只能看到視圖所顯示的數(shù)據(jù)磷雇。
4、視圖還可以被嵌套躏救,一個(gè)視圖中可以嵌套另一個(gè)視圖唯笙。
總結(jié):使用視圖螟蒸,需要把它看著為一張表,建立步驟和建立一張實(shí)體表步驟相同崩掘,
視圖查出來(lái)的數(shù)據(jù)只能進(jìn)行查看七嫌,不能增刪改。
隱藏了復(fù)雜的sql語(yǔ)句苞慢,只顯示最簡(jiǎn)單的查詢操作