2022-03-15

多表設計

4.1.一對一

一張表的一條記錄一定只能與另外一張表的一條記錄進行對應宴抚,反之亦然袄膏。

有時候践图,為了業(yè)務,或者避免一張表中數(shù)據(jù)量過大沉馆,過復雜码党,在開發(fā)中會進行一對一方式來設計表。

一對一.png

4.2. 一對多(1方建主表(id為主鍵字段), 多方建外鍵字段)

一個實體的某個數(shù)據(jù)與另外一個實體的多個數(shù)據(jù)有關聯(lián)關系斥黑, 一對多的關系在設計的時候揖盘,需要設計表的外鍵。

4.2.1. 班級表和學生表設計

image.png

image.png

部門表和員工表設計

image.png

4.2.2.創(chuàng)建數(shù)據(jù)庫表

constraint 約束

foreign key就是表與表之間的某種約定的關系锌奴,由于這種關系的存在兽狭,能夠讓表與表之間的數(shù)據(jù),更加的完整,關連性更強椭符。

foreign key語句的式例:FOREIGN KEY(Sno) REFERENCES Student(Sno)

注意:表的外鍵必須是另一張表的主鍵

//創(chuàng)建班級表create tableclass(idintprimary key auto_increment,namevarchar(20));//創(chuàng)建學生表create tablestudent(idintprimary key auto_increment,namevarchar(20),sexvarchar(20),class_idint,constraint? foreignkey(class_id)referencesclass(id));//插入班級數(shù)據(jù)insertintoclassvalues(1,'ceshiban');insertintoclassvalues(2,'kaifa');//插入學生數(shù)據(jù)insertintostudentvalues(1,'zhangsan','nan',1);insertintostudentvalues(2,'lisi','nan',2);insertintostudentvalues(3,'jingjing','nan',2);//聯(lián)查select*fromstudentwhereclass_id=(selectidfromclasswhereid=2);

補一個外鍵的注意(默認是約束): 刪除主鍵信息時荔燎,當該主鍵字段值在外鍵表中存在時,該記錄是不能刪除的销钝。---要把外鍵表是的相關信息刪除之后有咨,才能刪除。

子查詢:嵌套在其他查詢中的查詢蒸健。

4.3座享、多對多( 3個表= 2個實體表 + 1個關系表 )

一個實體的數(shù)據(jù)對應另外一個實體的多個數(shù)據(jù),另外實體的數(shù)據(jù)也同樣對應當前實體的多個數(shù)據(jù)似忧。

一個學生可以有多個老師渣叛,一個老師可以教多個學生

解決方案:創(chuàng)建一個中間表,專門用來維護多表之間的對應關系盯捌,通常是能夠唯一標識出數(shù)據(jù)的字段(主鍵)

create tableteacher(idintprimary key,namevarchar(100));create table student(idintprimary key,namevarchar(100));create tableteacher_student(teacher_idint,student_idint,constraint foreignkey(teacher_id)referencesteacher(id),constraint foreignkey(student_id)referencesstudent(id));insertintoteachervalues(1,'梁老師');insertintoteachervalues(2,'李老師');insertintostudentvalues(1,”張三”);insertintostudentvalues(2,”李四”);insertintoteacher_studentvalues(1,1);insertintoteacher_studentvalues(1,2);insertintoteacher_studentvalues(2,1);insertintoteacher_studentvalues(2,2);//查詢李老師所教的學生selectidfromteacherwherename=’李老師’selectstudent_idfromteacher_studentwhereteacher_id=idselect*fromstudentwhereidin(selectstudent_idfromteacher_studentwhereteacher_id=(selectidfromteacherwherename='李老師'));//查詢張三的所有老師select*fromteacherwhereidin(selectteacher_idfromteacher_studentwherestudent_id=(selectidfromstudentwherename='張三'));

五淳衙、 聯(lián)表查詢

分類:內(nèi)連接、外連接饺著、交叉連接

5.1. 初始定義表結構

create tablecustomer(idintprimary key auto_increment,namevarchar(20),cityvarchar(20));create tableorders(idintprimary key auto_increment,good_namevarchar(20),pricefloat(8,2),customer_idint);insertintocustomer(name,city)values('李老師','東北');insertintocustomer(name,city)values('崔老師','山西');insertintocustomer(name,city)values('張老師','內(nèi)蒙');insertintocustomer(name,city)values('閆老師','天津');insertintoorders(good_name,price,customer_id)values('電腦',59,1);insertintoorders(good_name,price,customer_id)values('筆記本',88,2);insertintoorders(good_name,price,customer_id)values('吹風機',99,1);insertintoorders(good_name,price,customer_id)values('香水',300,3);insertintoorders(good_name,price,customer_id)values('牛奶',100,6);

5.2.交叉查詢

交叉查詢箫攀,又叫笛卡爾積查詢,會將左表和右表的信息幼衰,做一個乘積將所有信息查詢出來靴跛,會產(chǎn)生臨時表,比較占用內(nèi)存渡嚣,生成的記錄數(shù)=表1 X表2

select*fromcustomer,orders;select*fromcustomer crossjoinorders;

5.3. 內(nèi)連接查詢

內(nèi)連接梢睛,inner join on 查詢兩張表,設定條件识椰,將兩張表中對應的數(shù)據(jù)查詢出來

不會產(chǎn)生笛卡爾積绝葡,不會產(chǎn)生臨時表,性能高

select*fromcustomer c innerjoinorders o on c.id=o.customer_id;select*fromcustomer,orderswherecustomer.id=orders.customer_id;select*fromcustomer c,orders owherec.id=o.customer_id;

5.4. 左外連接

左外連接? left join on 設定條件腹鹉,將兩張表對應的數(shù)據(jù)查詢出來藏畅,同時將左表自己沒有關聯(lián)的數(shù)據(jù)也查詢出來

注意:join前面是左,后面是右

select*fromcustomer c leftjoinorders o on c.id=o.customer_id;

5.5. 右外連接

右外連接 right join? on 設定條件种蘸,將兩張表對應的數(shù)據(jù)查詢出來墓赴,同時將右表自己沒有關聯(lián)的所有數(shù)據(jù)查詢出來

select*fromcustomer c rightjoinorders o on c.id=o.customer_id;

5.6. 聯(lián)合查詢

select*fromcustomer leftjoinorders on customer.id=orders.customer_idhaving price>20;

六、MySQL圖形化工具navicat

6.1. 安裝介紹

MySQL常見的圖形化工具

6.2. Navicat工具使用步驟

6.2.1. 鏈接航瞭,mysql诫硕,輸入用戶名,密碼

連接.png

image.png

6.2.2.新建庫刊侯,鼠標點擊右鍵

image.png

image.png

6.2.3.新建表

image.png

七章办、數(shù)據(jù)庫備份與恢復

1. 使用圖形界面工具:

image.png

2. 使用doc命令:

mysqldump –u用戶名 –p密碼 數(shù)據(jù)庫名>生成的腳本文件路徑

注意,不要打分號,不要登錄mysql藕届,直接在cmd下運行

注意挪蹭,生成的腳本文件中不包含create database語句

mysqldump -uroot -proot host>C:\Users\Administrator\Deskt

op\mysql\1.sql

image.png

3. 導入SQL文件

image.png

導入文件

image.png

刷新即可,F(xiàn)5刷新

4.恢復

a)使用圖形界面工具:

b)使用doc命令行:

i.不登錄恢復

mysql -u用戶名 -p密碼 數(shù)據(jù)庫<腳本文件路徑

注意休偶,不要打分號梁厉,不要登錄mysql,直接在cmd下運行

image.png

ii.登錄之后恢復

選擇庫 use 庫名稱

Source sql文件路徑

image.png

八踏兜、數(shù)據(jù)庫常用性能優(yōu)化(了解)

數(shù)據(jù)庫性能優(yōu)化這塊词顾,我們考慮比較多的還是查詢這塊,互聯(lián)網(wǎng)項目對數(shù)據(jù)查詢非常頻繁碱妆,對效率肉盹,性能要求比較高。

查詢這塊優(yōu)化的話疹尾,主要就需要使用索引這種方式上忍,所謂索引就是建立一種快速查找的方式,比如我們查字典,有一個ABCD的索引.

image.png

舉個例子,如果我們創(chuàng)建一個表create table user(id integer ,name varchar(20)纳本,job varchar(20));如果我們數(shù)據(jù)庫中有1000萬條數(shù)據(jù)窍蓝,當我查詢select * from user where name=’張三’的時候,這種查詢方式就類似于整個數(shù)據(jù)庫的掃描,效率非常低饮醇。

image.png

我們可以給這個name設置一個索引create index n on user (name);這是設置一種普通(normal)索引它抱,然后我們查詢的時候秕豫,有了這個索引朴艰,效率就會大大提升,當然對于索引混移,它的方式有BTree類型和Hash類型祠墅,是兩種管理數(shù)據(jù)庫索引的方式,這個我沒有深入研究歌径。這個我們可以自己設置毁嗦。默認是btree。

索引類型的話回铛,有normal(普通類型)類型狗准、unique(唯一類型)、fulltext全文索引茵肃、主鍵索引腔长、非空索引、聚集索引验残。

①主鍵索引捞附,primary key 在設置的時候,已經(jīng)指定了,其實也是非空索引鸟召。

②非空索引是not null,設置這種方式的該字段下內(nèi)容不能為空胆绊,

③聚集索引(聯(lián)合索引),是在設置多個查詢條件的時候使用欧募。比如 創(chuàng)建一張表压状,有名字,有工作跟继,我們想經(jīng)常頻繁的用到名字和工作它倆結合在一起來查詢數(shù)據(jù)庫中表的數(shù)據(jù)何缓。這個時候,可以將名字和工作指定為聚集索引还栓。create index m on user(name,job); 這樣當我們指定select * from user where name=xxx and job=xxx的時候碌廓,就會按照索引方式來做。

這種優(yōu)化方式就是索引優(yōu)化剩盒,在使用索引優(yōu)化方案的時候谷婆,我們需要注意避免在索引字段上使用條件函數(shù)等操作。

了解:

Show index form orders;查看索引

?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末辽聊,一起剝皮案震驚了整個濱河市纪挎,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌跟匆,老刑警劉巖异袄,帶你破解...
    沈念sama閱讀 212,884評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異玛臂,居然都是意外死亡烤蜕,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,755評論 3 385
  • 文/潘曉璐 我一進店門迹冤,熙熙樓的掌柜王于貴愁眉苦臉地迎上來讽营,“玉大人,你說我怎么就攤上這事泡徙〕髋簦” “怎么了?”我有些...
    開封第一講書人閱讀 158,369評論 0 348
  • 文/不壞的土叔 我叫張陵堪藐,是天一觀的道長莉兰。 經(jīng)常有香客問我,道長礁竞,這世上最難降的妖魔是什么糖荒? 我笑而不...
    開封第一講書人閱讀 56,799評論 1 285
  • 正文 為了忘掉前任,我火速辦了婚禮苏章,結果婚禮上寂嘉,老公的妹妹穿的比我還像新娘奏瞬。我一直安慰自己,他們只是感情好泉孩,可當我...
    茶點故事閱讀 65,910評論 6 386
  • 文/花漫 我一把揭開白布硼端。 她就那樣靜靜地躺著,像睡著了一般寓搬。 火紅的嫁衣襯著肌膚如雪珍昨。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 50,096評論 1 291
  • 那天句喷,我揣著相機與錄音镣典,去河邊找鬼。 笑死唾琼,一個胖子當著我的面吹牛兄春,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播锡溯,決...
    沈念sama閱讀 39,159評論 3 411
  • 文/蒼蘭香墨 我猛地睜開眼赶舆,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了祭饭?” 一聲冷哼從身側響起芜茵,我...
    開封第一講書人閱讀 37,917評論 0 268
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎倡蝙,沒想到半個月后九串,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,360評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡寺鸥,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,673評論 2 327
  • 正文 我和宋清朗相戀三年猪钮,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片析既。...
    茶點故事閱讀 38,814評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡躬贡,死狀恐怖谆奥,靈堂內(nèi)的尸體忽然破棺而出眼坏,到底是詐尸還是另有隱情,我是刑警寧澤酸些,帶...
    沈念sama閱讀 34,509評論 4 334
  • 正文 年R本政府宣布宰译,位于F島的核電站,受9級特大地震影響魄懂,放射性物質發(fā)生泄漏沿侈。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 40,156評論 3 317
  • 文/蒙蒙 一市栗、第九天 我趴在偏房一處隱蔽的房頂上張望缀拭。 院中可真熱鬧咳短,春花似錦、人聲如沸蛛淋。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,882評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽褐荷。三九已至勾效,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間叛甫,已是汗流浹背层宫。 一陣腳步聲響...
    開封第一講書人閱讀 32,123評論 1 267
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留其监,地道東北人萌腿。 一個月前我還...
    沈念sama閱讀 46,641評論 2 362
  • 正文 我出身青樓,卻偏偏與公主長得像抖苦,于是被迫代替她去往敵國和親哮奇。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 43,728評論 2 351

推薦閱讀更多精彩內(nèi)容

  • 一睛约、數(shù)據(jù)庫概述 1.為什么軟件測試工程師還需要學習數(shù)據(jù)庫以及開發(fā)方面的知識鼎俘? 測試工程師的目的是找出軟件的不足,并...
    745aacb67869閱讀 174評論 0 0
  • 一辩涝、數(shù)據(jù)庫概述 1.為什么軟件測試工程師還需要學習數(shù)據(jù)庫以及開發(fā)方面的知識贸伐? 測試工程師的目的是找出軟件的不足,并...
    九櫻MOL閱讀 157評論 0 0
  • 數(shù)據(jù)庫 一怔揩、數(shù)據(jù)庫概述 1.為什么軟件測試工程師還需要學習數(shù)據(jù)庫以及開發(fā)方面的知識捉邢? 測試工程師的目的是找出軟件的...
    __65a0閱讀 181評論 0 0
  • 4.1.一對一 一張表的一條記錄一定只能與另外一張表的一條記錄進行對應,反之亦然商膊。 有時候伏伐,為了業(yè)務,或者避免一張...
    ldxzs閱讀 719評論 0 0
  • 顯示數(shù)據(jù)庫 show databases; 數(shù)據(jù)庫切換 use數(shù)據(jù)庫 查看當前庫的所有表 show tables;...
    扶弦閱讀 430評論 0 0