MySQL多表 外來鍵 資料庫設計

2021-10-13 10:14:26 字數 3615 閱讀 4184

2. 多表關係設計

3. 多表查詢

3.1.2 外連線查詢

3.1.3 各種連線方式的總結

4. 子查詢 (subquery)

5. 資料庫設計

5.2 資料庫反三正規化

員工表中有乙個欄位dept_id 與部門表中的主鍵對應,員工表的這個欄位就叫做 外來鍵

擁有外來鍵的員工表 被稱為 從表 , 與外來鍵對應的主鍵所在的表叫做 主表

#1. 新建表時新增外來鍵

-- [constraint] [外來鍵約束名稱] foreign key(外來鍵欄位名) references 主表名(主鍵欄位名)

#1. 已有表新增外來鍵

-- alter table 從表 add [constraint] [外來鍵約束名稱] foreign key (外來鍵欄位名) references

主表(主 鍵欄位名)

1.2.1 外來鍵約束的注意事項

從表外來鍵型別必須與主表主鍵型別一致 否則建立失敗.

新增資料時, 應該先新增主表中的資料.

刪除資料時,應該先刪除從表中的資料.

1.2.2 級聯刪除操作(了解)

-- 級聯刪除

ondelete

cascade

-- 重新建立新增級聯操作

create

table employee(

eid int

primary

keyauto_increment

, ename varchar(20

),age int

, dept_id int

,constraint emp_dept_fk foreign

key(dept_id)

references department(id)

-- 新增級聯刪除

ondelete

cascade

)

3.1.1 內連線查詢

3.1.1.1 隱式內連線

select 欄位名 from 左表, 右表 where 連線條件;

# 隱式內連線

select

*from products,category where category_id = cid;

3.1.1.2 顯式內連線
select 欄位名 from 左表 [

inner

]join 右表 on 條件

-- inner 可以省略

# 顯式內連線查詢

select

*from products p inner

join category c on p.category_id = c.cid;

3.1.2 外連線查詢

3.1.2.1 左外連線

select 欄位名 from 左表 left

[outer

]join 右表 on 條件

-- 左外連線查詢

select

*from category c left

join products p on c.

`cid`

= p.

`category_id`

;

3.1.2.2 右外連線

select 欄位名 from 左表 right

[outer

]join 右表 on 條件

-- 右外連線查詢

select

*from products p right

join category c on p.

`category_id`

= c.

`cid`

;

3.1.3 各種連線方式的總結

子查詢的特點

子查詢常見分類

select 查詢字段 from 表 where 字段=(子查詢);

# 通過子查詢的方式, 查詢**最高的商品資訊

-- 1.先查詢出最**格

select

max(price)

from products;

-- 2.將最**格作為條件,獲取商品資訊

select

*from products where price =

(select

max(price)

from products)

;

select 查詢字段 from (子查詢)表別名 where 條件;

-- 1. 先查詢分類表的資料

select

*from category;

-- 2.將上面的查詢語句 作為一張表使用

select

p.`pname`,p.

`price`

,c.cname

from products p

-- 子查詢作為一張表使用時 要起別名 才能訪問表中字段

inner

join

(select

*from category) c

on p.

`category_id`

= c.cid where p.

`price`

>

500;

注意: 當子查詢作為一張表的時候,需要起別名,否則無法訪問表中的字段。

select 查詢字段 from 表 where 字段 in (子查詢);

# 查詢**小於兩千的商品,來自於哪些分類(名稱)

-- 先查詢**小於2000 的商品的,分類id

select

distinct category_id from products where price <

2000

;-- 在根據分類的id資訊,查詢分類名稱

-- 報錯: subquery returns more than 1 row

-- 子查詢的結果 大於一行

select

*from category

where cid =

(select

distinct category_id from products where price <

2000

);

子查詢如果查出的是乙個字段(單列), 那就在where後面作為條件使用.

子查詢如果查詢出的是多個字段(多列), 就當做一張表使用(要起別名).

5.1.1 第一正規化 1nf

示例:

5.1.2 第二正規化 2nf

示例:

5.1.3 第三正規化 3nf

示例 5.2.1 概念

5.2.2 什麼是冗餘字段 ?

5.2.4 總結

資料庫設計外來鍵

今天心情很煩躁,公司來了新員工,我感覺到自己這個渣渣要晚年不保啊,隨後就隨便網上逛逛,看到這個挺有意思。設計外來鍵竟然還有人不會?哈哈哈,這不是說我呢嘛!外來鍵一般用於一對多的時候,比如說某個型別type下面可能有多個物件。訂單的話,乙個訂單號肯定會有關於這個訂單 號碼 的訂單詳情,這是給客戶看的,...

MySQL 資料庫外來鍵

如果表a的主關鍵字是表b中的字段,則該字段稱為表b的外來鍵,表a稱為主表,表b稱為從表。外來鍵是用來實現參照完整性的,不同的外來鍵約束方式將可以使兩張表緊密的結合起來,特別是修改或者刪除的級聯操作將使得日常的維護工作更加輕鬆。這裡以mysql為例,總結一下3種外來鍵約束方式的區別和聯絡。這裡以使用者...

MySQL資料庫外來鍵

設定外來鍵 外來鍵及功能 成績表 參照表也叫子表 中的學號來自學生表 被參照表也叫父表 成績表中的課程號來自課程表 當要刪除或更新被參照表中的給字段的值時,參照錶該字段的值如何改變。在on delete on update設定參照動作 restrict 限制 cascade 級聯 set null ...