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的相同
多執行緒學習(5):synchronized 的基礎使用
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學習(5):Renderer
Renderer渲染器的工作是用來將物體繪製到螢幕上。 1.WebGLRenderer (1)建構函式: WebGLRenderer(parameters:object) –parameters–(可選引數)定義渲染器的行為。 –canvas–提供一個渲染器繪製
caffe入門學習(5):繪製網路結構圖
網路配置都是在prototxt檔案中看起來不直觀,如果能直接看到各層的連線圖就了,Caffe提供了這樣的工具。本文就是描述我用draw_net.py繪製網路結構圖的踏坑過程。 1、安裝graphviz 2)安裝程式 執行安裝程式 完成後將路徑下的
多執行緒學習(一):多執行緒的兩種實現方式
程序和執行緒 程序是受作業系統管理的基本執行單元。 執行緒是在程序中獨立執行的子任務。 多執行緒的優點 使用多執行緒技術後,可以在同一時間內執行更多不同種類的任務。 單執行緒是同步執行任務,多執行緒是非同步執行任務。 多執行緒的使用方式 1:繼承Thread 2:實現
Spring學習(5):SpringAOP的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