1. 程式人生 > >mysql學習(5):多表之間的關係

mysql學習(5):多表之間的關係

mysql相互關聯的表之間存在一對一,一對多(多對一),多對多的關係。

1,一對一的關係

這種關係即多個表具有相同的主鍵,實際中用的並不多,因為完全可以將這種關係的合併為同一張表。

2,一對多(多對一)的關係

其中表1的主鍵是表2的外來鍵(即表1的某欄位作為主鍵,表2的相同欄位欄位繫結到表1的主鍵欄位上),舉個簡單的例子:

有學生表和成績表如下:

CREATE TABLE stu(
	stuId INT,
	name VARCHAR(10) NOT NULL,
	PRIMARY KEY(stuId)
);
CREATE TABLE score(
	stuId INT,
	score INT,
	FOREIGN KEY (stuId) REFERENCES stu(stuId)
);

stu表中以stuId為主鍵。score表中同樣有stuId欄位,將兩個stuId欄位相關聯。

FOREIGN KEY (stuId) REFERENCES stu(stuId)  //這句話表示將當前表的stuId欄位關聯到stu表的stuId欄位,作為stu表的外來鍵

於是,兩張表就產生了關係:


(1)在建立資料時,要先在stu表中指定stuId,才能在score表中新增對應stuId的成績。反之,想要在score表中建立stuId(而stu表中沒有該stuId)的話,就會報錯。

(2)在刪除表時,要先刪除score表,再刪stu表。反之會報錯。

3,多對多的關係

這種關係在實際中也很常見,比如:一個老師教很多學生的課,一個學生選了很多老師的課。那麼,老師和學生之間就是多對多的關係。

多對多的關係要藉助於第3張表。舉個簡單的例子:

(1)首先建立老師表,設定id為主鍵

CREATE TABLE teacher(
	teacherId INT,
	NAME VARCHAR(10) NOT NULL,
	PRIMARY KEY(teacherId)
);
(2)然後建立學生表,同樣設定id為主鍵
CREATE TABLE stu(
	stuId INT,
	NAME VARCHAR(10) NOT NULL,
	PRIMARY KEY(stuId)
);
(3)最後建立一張表,將前兩張表關係起來,如建立一個課程表:
CREATE TABLE score(
	stuId INT,
	teacherId INT,
	FOREIGN KEY (stuId) REFERENCES stu(stuId),
	FOREIGN KEY (teacherId) REFERENCES teacher(teacherId)
);
將課程表的欄位分別設定為教師表和學生表的外來鍵,關係如下:


這樣就可以形成多對多的關係了,使用方法同一對多。

(1)首先保證教師表和學生表中有資料,再建立課程表中的資料。

(2)刪除表時,先刪除課程表,再刪除其他表。

相關推薦

mysql學習5之間關係

mysql相互關聯的表之間存在一對一,一對多(多對一),多對多的關係。 1,一對一的關係 這種關係即多個表具有相同的主鍵,實際中用的並不多,因為完全可以將這種關係的合併為同一張表。 2,一對多(多對一)的關係 其中表1的主鍵是表2的外來鍵(即表1的某欄位作為主鍵,表2的相同

執行緒學習5synchronized 的基礎使用

2018年10月03日 目錄 前言 前言 java中已經有了內建鎖:synchronized,synchronized的特點是使用簡單,一切交給JVM去處理,不需要顯示釋放; j

Django系列操作

例如 get city 定義 庫類 修改配置 銷售部 blog 返回 1、創建模型 例:我們來假定下面這些概念,字段和關系   作者模型:一個作者有姓名和年齡。   作者詳細模型:把作者的詳情放到詳情表,包含生日,手機號,家庭住址等信息。作者詳情模型和作者模型之間是一對一(

PE檔案格式學習匯出

1.回顧 上篇文章中介紹過,可選頭中的資料目錄表是一個大小為0x10的陣列,匯出表就是這個陣列中的第一個元素。 我們再回顧下資料目錄表的結構體: struct _IMAGE_DATA_DIRECTORY {     DWORD VirtualAddress;    

PE檔案格式學習安全

1.介紹 如果一個應用程式有數字簽名,那麼它的安全表就不會為空。它位於異常表的後面。 2.安全表解析 通過資料目錄表裡提供的RVA,我們轉換成offset,找到了安全表的位置,如下: 安全表的結構體如下: typedef struct _WIN_CERTIFIC

PE檔案格式學習異常

1.概述 x86系統採用動態的方式構建SEH結構,相比而言x64系統下采用靜態的方式處理SEH結構,它儲存在PE檔案中,通常在.pdata區段。因此本文的例子採用x64編譯過的程式。 異常表在資源表的後面。 2.異常表解析 資料目錄表的第四個元素指向異常表,RVA指向的是

PE檔案格式學習資源

1.概述 程式內部和外部的介面等元素的二進位制資料統稱為資源,程式把它們放在一個特定的表中,符合資料和程式分離的設計原則。 Windows程式中的資源大致分為六類:選單、對話方塊、點陣圖、游標、圖示、自定義資源 資源表是資料目錄表中的第三個元素,排在匯入表的後面。 2.資

PE檔案格式學習匯入

UPDATE: 在文章的末尾更新了一張圖,在網上找的,有助於理解匯入表的結構 1.概述 匯入表是逆向和病毒分析中比較重要的一個表,在分析病毒時幾乎第一時間都要看一下程式的匯入表的內容,判斷程式大概用了哪些功能。 匯入表是資料目錄表中的第2個元素,排在匯出表的

mybatis學習5關聯查詢的幾種方式

文章末尾附上Employee.java  和 Department.java 方式一:聯合查詢:級聯屬性封裝結果集     <resultMap type="com.atguigu.mybatis.bean.Employee" id="MyDi

tensorflow學習5變數管理

我們在寫神經網路的時候,往往需要傳遞很多引數。而且當網路結構更復雜,引數更多的時候,在一個函式中寫若干要傳遞的引數往往不現實,如 def inference(w1,w2,w3,w4,w5.....) 因此,我們需要有一個更好的方式來傳遞和管理神經網路中的引數。tensorflow提

MySQL學習01基本指令入門

  資料庫基礎 資料庫:儲存有組織的資料的容器 表:某種特定型別資料的結構化清單,具有唯一的名字 列:表中的一個欄位,表由一個或多個列構成 資料型別:限制列中可儲存的資料型別,便於正確的分類資料 行:表中的一條記錄,行編號即為記錄的編號 主鍵:一組列,其值能夠唯

three.js學習5Renderer

Renderer渲染器的工作是用來將物體繪製到螢幕上。 1.WebGLRenderer (1)建構函式: WebGLRenderer(parameters:object) –parameters–(可選引數)定義渲染器的行為。 –canvas–提供一個渲染器繪製

caffe入門學習5繪製網路結構圖

網路配置都是在prototxt檔案中看起來不直觀,如果能直接看到各層的連線圖就了,Caffe提供了這樣的工具。本文就是描述我用draw_net.py繪製網路結構圖的踏坑過程。 1、安裝graphviz 2)安裝程式 執行安裝程式 完成後將路徑下的

執行緒學習執行緒的兩種實現方式

程序和執行緒 程序是受作業系統管理的基本執行單元。 執行緒是在程序中獨立執行的子任務。 多執行緒的優點 使用多執行緒技術後,可以在同一時間內執行更多不同種類的任務。 單執行緒是同步執行任務,多執行緒是非同步執行任務。 多執行緒的使用方式 1:繼承Thread 2:實現

Spring學習5SpringAOP的5種增強型別

前言 Spring使用增強類定義橫切邏輯,同時由於Spring只支援方法連線點,增強類還包括在方法的哪一點加入橫切程式碼的方位資訊,所以增強既包含橫切邏輯,又包含部分連線點資訊。使用增強前,最好能理解動態代理的知識。本文分別採用繼承介面和使用配置檔案來實現增強

Oracle基礎查詢

一、多表查詢 (一)簡單多表查詢 1、多表查詢的機制 1)SQL: SELECT * FROM emp; --14條記錄 SELECT * FROM dept;--4條記錄 SELECT * FROM emp,dept;--顯示56條資料??為什麼 2)分析: 先從 d

dubbo 學習5 dubbo協議和註冊中心

一、配置dubbo多協議模式 1、預設協議  Dubbo預設協議採用單一長連線和NIO非同步通訊,適合於小資料量大併發的服務呼叫,以及服務消費者機器數遠大於服務提供者機器數的情況。Dubbo預設協議不適合傳送大資料量的服務,比如傳檔案,傳視訊等,除非請求量很低。 <

機器學習5機器學習的一個例項

大家都知道tensorflow(簡稱tf)是一個機器學習的框架,使用它就可以完成機器學習。那就用tf來演示一下怎麼做機器學習吧,這樣你就有一個具體的感受:原來是這樣的啊! 本文使用tensorflow做一次機器學習的演示。 但是,tensorflow的理解跟使用,是可以作為一個獨立的專題來講解的,這個我再補充

MySQL 入門5複製

## 摘要 在這篇文章中,我將從MySQL為什麼需要主從複製開始講起,然後會提到MySQL複製的前提,`bin log`。 在這裡會說明三種格式的`bin log`分別會有什麼優缺點。 隨後會講到主從延遲方面的問題,我將從幾個角度出發,提供一些可能造成延遲的思路。 ## 1 為什麼需要

深度學習Deeplearning4j 入門實戰5基於層感知機的Mnist壓縮以及在Spark實現

在上一篇部落格中,我們用基於RBM的的Deep AutoEncoder對Mnist資料集進行壓縮,應該說取得了不錯的效果。這裡,我們將神經網路這塊替換成傳統的全連線的前饋神經網路對Mnist資料集進行壓縮,看看兩者的效果有什麼異同。整個程式碼依然是利用Deeplearnin