1. 程式人生 > >表與表之間的關系二

表與表之間的關系二

雙向 del cad lex http ID id字段 cat 刪掉

---恢復內容開始---

導語:

把所有的數據都存放於一張表的弊端

1:表的組織結構復雜不清晰

2:浪費空間

3:擴展性極差

一、 尋找表與表之間的關系套路:

舉例:emp 員工表 dep 部門表

步驟:

  part1:

    1、先站在左表 emp 的角度

    2、去找左表emp 的多條記錄能否對應右表dep的一條記錄

    3、翻譯2 的意義:

        左表emp 的多條記錄==》》多個員工

        右表dep 的一條記錄==》》一個部門

         最終的翻譯結果:多個員工是否可以屬於同一個部門?

         如果是則需要進行part2 的流程

  part2:

    1、先站在右表dep 的角度

    2、去找右表dep 的多條記錄能否對應左表emp的一條記錄

    3、翻譯2 的意義:

        右表dep的多條記錄==》》多個員工

        左表emp 的一條記錄==》》一個部門

         最終的翻譯結果:多個部門是否可以包含同一個員工

         如果不可以, 則可以確定emp與dep的 關系只一個單向的多對一

         如何實現?

            在emp表中新增一個dep_id 字段, 該字段指向dep表的id字段

配圖:

技術分享圖片

用foreign key 來實現 多對一

約束1:在創建表時, 先創建被關聯的表dep(也就是多對一中的一),在創建關聯表emp(多對一的多),否則就會報錯

技術分享圖片

約束2:在插入記錄時, 必須先插被關的表dep,才能插關聯表emp,否則也會報錯

技術分享圖片

3:約束3:更新與刪除都需要考慮到關聯與被關聯的關系

1:先刪除關聯表emp1,再刪除被關聯表dep1, 否則也會報錯

技術分享圖片

2:重建:新增功能,同步更新, 同步刪除 用on update cascade on delete cascade

先創建:

技術分享圖片

技術分享圖片

查詢數據:

技術分享圖片

同步刪除:delete from 表名 where + 條件

技術分享圖片

同步更新:update 表名 set 更改內容 where +條件

技術分享圖片

清空表:delete from tb1

q強調;上面這條命令確實可以將表裏的記錄都刪掉, 但是不會將id重置為0,

所有該條命令根本不是用來清空表的, delete是用來刪除表中某一些符合條件的記錄

delete from tb1 where id >10;

如果要清空表 要使用truncate tb1;

作用是將整張表重置。

技術分享圖片

如圖:刪掉id>3 以上的數據後 在添加新的數據, 是在原來沒有刪除的id的基礎上添加。所以這時不應該用 delete.

二:多對多

兩張表之間是一個雙向的多對一關系,稱之為多對多

如何實現

建立第3張表,該表中有一個字段fk 左表的id,還有一個字段fk 右表的id

例如:兩張表, 一個書表,一個作者表:

技術分享圖片

首先創造出這兩張表:

技術分享圖片

現在創造第3張表

技術分享圖片

查詢:

技術分享圖片

一對一

左表的一條記錄唯一對應右表的一條記錄,反之也一樣

配圖:

技術分享圖片

張鐵蛋 李大炮 楊力 趙子彈 劉二丫 王三炮 alex 梁樹東

創建表

技術分享圖片

技術分享圖片

插入數據:

技術分享圖片

查數據:

技術分享圖片

---恢復內容結束---

表與表之間的關系二