1.數(shù)據(jù)庫中的多對多關(guān)聯(lián)關(guān)系一般需采用中間表的方式處理,將多對多轉(zhuǎn)化為兩個(gè)一對多。
專注于為中小企業(yè)提供成都做網(wǎng)站、成都網(wǎng)站建設(shè)、成都外貿(mào)網(wǎng)站建設(shè)服務(wù),電腦端+手機(jī)端+微信端的三站合一,更高效的管理,為中小企業(yè)洪澤免費(fèi)做網(wǎng)站提供優(yōu)質(zhì)的服務(wù)。我們立足成都,凝聚了一批互聯(lián)網(wǎng)行業(yè)人才,有力地推動了數(shù)千家企業(yè)的穩(wěn)健成長,幫助中小企業(yè)通過網(wǎng)站建設(shè)實(shí)現(xiàn)規(guī)模擴(kuò)充和轉(zhuǎn)變。
2.通過表的關(guān)系,來幫助我們怎樣建表,建幾張表。
一對一
一張表的一條記錄一定只能與另外一張表的一條記錄進(jìn)行對應(yīng),反之亦然。
學(xué)生表:姓名,性別,年齡,身高,體重,籍貫,家庭住址,緊急聯(lián)系人
其中姓名、性別、年齡、身高,體重屬于常用數(shù)據(jù),但是籍貫、住址和聯(lián)系人為不常用數(shù)據(jù)
如果每次查詢都是查詢所有數(shù)據(jù),不常用的數(shù)據(jù)就會影響效率,實(shí)際又不用
常用信息表:ID(P),姓名,性別,年齡,身高,體重
不常用信息表:ID(P),籍貫,家庭住址,緊急聯(lián)系人
解決方案:將常用的和不常用的信息分享存儲,分成兩張表
不常用信息表和常用信息表,保證不常用信息表與常用信息表能夠?qū)?yīng)上:找一個(gè)具有唯一性的
字段來共同連接兩張表。
一個(gè)常用表中的一條記錄永遠(yuǎn)只能在一張不常用表中匹配一條記錄,反之亦然。
一對多
一張表中有一條記錄可以對應(yīng)另外一張表中的多條記錄;但是反過來,另外一張表的一條記錄
只能對應(yīng)第一張表的一條記錄,這種關(guān)系就是一對多或多對一
母親與孩子的關(guān)系:母親,孩子兩個(gè)實(shí)體
母親表:ID(P),名字,年齡,性別
孩子表:ID(P),名字,年齡,性別
以上關(guān)系:一個(gè)媽媽可以在孩子表中找到多條記錄(也可能是一條),但是一個(gè)孩子只能找到一個(gè)媽媽
是一種典型的一對多的關(guān)系。
但是以上設(shè)計(jì):解決了實(shí)體的設(shè)計(jì)表問題,但是沒有解決關(guān)系問題,孩子找不到母親,母親也找不到孩子
解決方案:在某一張表中增加一個(gè)字段,能夠找到另外一張表中的記錄:在孩子表中增加一個(gè)字段
指向母親表,因?yàn)楹⒆颖淼挠涗浿荒芷ヅ涞揭粭l母親表的記錄。
母親表:ID(P),名字,年齡,性別
孩子表:ID(P),名字,年齡,性別,母親表ID(母親表主鍵)
多對多
一對表中(A)的一條記錄能夠?qū)?yīng)另外一張表(B)中的多條記錄;同時(shí)B表中的一條記錄
也能對應(yīng)A表中的多條記錄
老師和學(xué)生
老師表 T_ID(P),姓名,性別
學(xué)生表 S_ID(P),姓名,性別
以上設(shè)計(jì)方案:實(shí)現(xiàn)了實(shí)體的設(shè)計(jì),但是沒有維護(hù)實(shí)體的關(guān)系
一個(gè)老師教過多個(gè)學(xué)生,一個(gè)學(xué)生也被多個(gè)老師教過
解決方案:增加一張中間關(guān)系表
老師與學(xué)生的關(guān)系表:ID(P),T_ID,S_ID
老師表與中間表形成一對多的關(guān)系,而中間表是多表;維護(hù)了能夠唯一找到一表的關(guān)系;
同樣的學(xué)生表與中間表也是一個(gè)一對多的關(guān)系;
學(xué)生找老師:找出學(xué)生ID---中間表尋找匹配記錄(多條)---老師表匹配(一條)
老師找學(xué)生:找出老師ID---中間表尋找匹配記錄(多條)---學(xué)生表匹配(一條)
一張表中的主鍵只能有一個(gè),外鍵可以有多個(gè),如果一張表中多個(gè)列都需要被別的表的外鍵參考,需要使用候選碼(非空并且唯一),具體到你的這個(gè)問題的需求可以考慮用如下方法解決:
把a(bǔ)表中的bookid和authorid都設(shè)置為非空并且唯一,即
create table a(bookid int not null unique, authorid int not null unique);
然后在book表和author表中就可以分別設(shè)置外鍵來參照a表中兩個(gè)不同的字段了。
打開我的navicat,然后找到我的teacher表,選中它,然后點(diǎn)擊菜單欄上的‘design table'
2. 在彈出的對話框中找到“Foreign Keys”,然后單機(jī)。
3. 然后會出現(xiàn)一個(gè)設(shè)置外鍵的界面,一共有七列。簡單介紹一下這幾列的意思。‘name’:可以不填,你一會保存成功系統(tǒng)會自動生成。FieldName’:就是你要把哪個(gè)鍵設(shè)置為外鍵。這里選擇‘dept’,‘Reference DadaBase’:外鍵關(guān)聯(lián)的數(shù)據(jù)庫。‘Reference Table‘ :關(guān)聯(lián)的表 這里是dept表‘Forgin filed Names’:關(guān)聯(lián)的的字段,這里是code‘ondelete’:就是刪除的時(shí)候選擇的動作。這里我的選擇是setNull,意思就是當(dāng)關(guān)聯(lián)的表刪除以后,teacher》dept字段會設(shè)置為null.
4. 設(shè)置完成后點(diǎn)擊‘save’保存退出,也可以點(diǎn)擊‘a(chǎn)dd Foreign Key’再添加一個(gè)外鍵。
打開我的navicat,然后找到我的teacher表,選中它,然后點(diǎn)擊菜單欄上的‘design table’。如下圖:
2. 在彈出的對話框中找到“Foreign Keys”,然后單機(jī)。如下圖:
3. 然后會出現(xiàn)一個(gè)設(shè)置外鍵的界面,一共有七列。簡單介紹一下這幾列的意思。‘name’:可以不填,你一會保存成功系統(tǒng)會自動生成。FieldName’:就是你要把哪個(gè)鍵設(shè)置為外鍵。這里選擇‘dept’,‘Reference DadaBase’:外鍵關(guān)聯(lián)的數(shù)據(jù)庫。‘Reference Table‘ :關(guān)聯(lián)的表 這里是dept表‘Forgin filed Names’:關(guān)聯(lián)的的字段,這里是code‘ondelete’:就是刪除的時(shí)候選擇的動作。這里我的選擇是setNull,意思就是當(dāng)關(guān)聯(lián)的表刪除以后,teacher》dept字段會設(shè)置為null。如圖
4. 設(shè)置完成后點(diǎn)擊‘save’保存退出,也可以點(diǎn)擊‘a(chǎn)dd Foreign Key’再添加一個(gè)外鍵。k如圖:
方法如下:
1、首先打開Mysql命令行編輯器,連接Mysql數(shù)據(jù)庫;
2、使用所要操作的數(shù)據(jù)庫,先顯示一下數(shù)據(jù)庫中的表;
3、顯示一下表結(jié)構(gòu),了解一下表中的列;
4、向表插入數(shù)據(jù),insert into 表名 (列名) values (值);
5、查詢表可以看到所插入的數(shù)據(jù),select * from 表名;
6、可以再插入一個(gè)數(shù)據(jù),顯示一下。
擴(kuò)展資料:
MySQL是一個(gè)關(guān)系型數(shù)據(jù)庫管理系統(tǒng),由瑞典MySQL AB 公司開發(fā),目前屬于?Oracle?旗下產(chǎn)品。MySQL 是最流行的關(guān)系型數(shù)據(jù)庫管理系統(tǒng)之一,在 WEB 應(yīng)用方面,MySQL是最好的?RDBMS?(Relational Database Management System,關(guān)系數(shù)據(jù)庫管理系統(tǒng)) 應(yīng)用軟件。
MySQL是一種關(guān)系數(shù)據(jù)庫管理系統(tǒng),關(guān)系數(shù)據(jù)庫將數(shù)據(jù)保存在不同的表中,而不是將所有數(shù)據(jù)放在一個(gè)大倉庫內(nèi),這樣就增加了速度并提高了靈活性。
MySQL所使用的 SQL 語言是用于訪問數(shù)據(jù)庫的最常用標(biāo)準(zhǔn)化語言。MySQL 軟件采用了雙授權(quán)政策,分為社區(qū)版和商業(yè)版,由于其體積小、速度快、總體擁有成本低,尤其是開放源碼這一特點(diǎn),一般中小型網(wǎng)站的開發(fā)都選擇 MySQL 作為網(wǎng)站數(shù)據(jù)庫。
由于其社區(qū)版的性能卓越,搭配?PHP?和?Apache?可組成良好的開發(fā)環(huán)境。
與其他的大型數(shù)據(jù)庫,例如?Oracle、DB2、SQL Server等相比,MySQL自有它的不足之處,但是這絲毫也沒有減少它受歡迎的程度。對于一般的個(gè)人使用者和中小型企業(yè)來說,MySQL提供的功能已經(jīng)綽綽有余,而且由于 MySQL是開放源碼軟件,因此可以大大降低總體擁有成本。
Linux作為操作系統(tǒng),Apache?或Nginx作為?Web?服務(wù)器,MySQL 作為數(shù)據(jù)庫,PHP/Perl/Python作為服務(wù)器端腳本解釋器。由于這四個(gè)軟件都是免費(fèi)或開放源碼軟件(FLOSS),因此使用這種方式不用花一分錢(除開人工成本)就可以建立起一個(gè)穩(wěn)定、免費(fèi)的網(wǎng)站系統(tǒng),被業(yè)界稱為“LAMP“或“LNMP”組合。
MyISAMMySQL 5.0 之前的默認(rèn)數(shù)據(jù)庫引擎,最為常用。擁有較高的插入,查詢速度,但不支持事務(wù)
InnoDB事務(wù)型數(shù)據(jù)庫的首選引擎,支持ACID事務(wù),支持行級鎖定, MySQL 5.5 起成為默認(rèn)數(shù)據(jù)庫引擎
BDB源 自 Berkeley DB,事務(wù)型數(shù)據(jù)庫的另一種選擇,支持Commit 和Rollback 等其他事務(wù)特性
Memory所有數(shù)據(jù)置于內(nèi)存的存儲引擎,擁有極高的插入,更新和查詢效率。但是會占用和數(shù)據(jù)量成正比的內(nèi)存空間。并且其內(nèi)容會在 MySQL 重新啟動時(shí)丟失
Merge將一定數(shù)量的 MyISAM 表聯(lián)合而成一個(gè)整體,在超大規(guī)模數(shù)據(jù)存儲時(shí)很有用
Archive非常適合存儲大量的獨(dú)立的,作為歷史記錄的數(shù)據(jù)。因?yàn)樗鼈儾唤?jīng)常被讀取。Archive 擁有高效的插入速度,但其對查詢的支持相對較差
Federated將不同的 MySQL 服務(wù)器聯(lián)合起來,邏輯上組成一個(gè)完整的數(shù)據(jù)庫。非常適合分布式應(yīng)用
Cluster/NDB高冗余的存儲引擎,用多臺數(shù)據(jù)機(jī)器聯(lián)合提供服務(wù)以提高整體性能和安全性。適合數(shù)據(jù)量大,安全和性能要求高的應(yīng)用
CSV: 邏輯上由逗號分割數(shù)據(jù)的存儲引擎。它會在數(shù)據(jù)庫子目錄里為每個(gè)數(shù)據(jù)表創(chuàng)建一個(gè) .csv 文件。這是一種普通文本文件,每個(gè)數(shù)據(jù)行占用一個(gè)文本行。CSV 存儲引擎不支持索引。
BlackHole:黑洞引擎,寫入的任何數(shù)據(jù)都會消失,一般用于記錄 binlog 做復(fù)制的中繼
EXAMPLE 存儲引擎是一個(gè)不做任何事情的存根引擎。它的目的是作為 MySQL?源代碼中的一個(gè)例子,用來演示如何開始編寫一個(gè)新存儲引擎。同樣,它的主要興趣是對開發(fā)者。EXAMPLE 存儲引擎不支持編索引。
另外,MySQL 的存儲引擎接口定義良好。有興趣的開發(fā)者可以通過閱讀文檔編寫自己的存儲引擎。
參考資料來源:百度百科:mySQL
分享題目:mysql多對多表怎么建 多表操作mysql
鏈接地址:http://vcdvsql.cn/article40/ddipoho.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供企業(yè)網(wǎng)站制作、網(wǎng)站排名、做網(wǎng)站、關(guān)鍵詞優(yōu)化、定制網(wǎng)站、靜態(tài)網(wǎng)站
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)