資料庫篇多表操作

2021-09-10 01:28:19 字數 3043 閱讀 3983

第1章 多表操作

實際開發中,乙個專案通常需要很多張表才能完成。例如:乙個**專案就需要分類表(category)、商品表(products)、訂單表(orders)等多張表。且這些表的資料之間存在一定的關係,接下來我們將在單錶的基礎上,一起學習多表方面的知識。

1.1 表與表之間的關係

有3類表關係:一對多(多對一)、多對多、一對一(了解)

 一對多關係:

 常見例項:學生和考試成績(畫圖),客戶和訂單,分類和商品,部門和員工.

 一對多建表原則:在從表(多方)建立乙個字段,字段作為外來鍵指向主表(一方)的主鍵.

 多對多關係:

 常見例項:學生和教師,商品和訂單(畫圖),學生和課程、使用者和角色

 多對多關係建表原則:需要建立第三張表,中間表中至少兩個字段,這兩個字段分別作為外來鍵指向各自一方的主鍵.

 一對一關係:(了解)

 在實際的開發中應用不多,比如qq號碼,和qq使用者資訊

 因為一對一可以建立成一張表.

 兩種建表原則:

 外來鍵唯一:主表的主鍵和從表的外來鍵(唯一),形成主外來鍵關係,外來鍵唯一unique。

 外來鍵是主鍵:主表的主鍵和從表的主鍵,形成主外來鍵關係。

1.2 外來鍵約束

現在我們有兩張表「分類表」和「商品表」,為了表明商品屬於哪個分類,通常情況下,我們將在商品表上新增一列,用於存放分類cid的資訊,此列稱為:外來鍵

此時「分類表category」稱為:主表,「cid」我們稱為主鍵。「商品表products」稱為:從表,category_id稱為外來鍵。我們通過主表的主鍵和從表的外來鍵來描述主外來鍵關係,呈現就是一對多關係。

外來鍵特點:

 從表外來鍵的值是對主表主鍵的引用。

 從表外來鍵型別,必須與主表主鍵型別一致。

 宣告外來鍵約束

語法:alter table 從表 add [constraint] [外來鍵名稱] foreign key (從表外來鍵欄位名) references 主表 (主表的主鍵);

[外來鍵名稱] 用於刪除外來鍵約束的,一般建議「_fk」結尾

alter table 從表 drop foreign key 外來鍵名稱

 使用外來鍵目的:

 保證資料完整性

1.3 一對多操作

1.3.1 分析

 category分類表,為一方,也就是主表,必須提供主鍵cid

 products商品表,為多方,也就是從表,必須提供外來鍵category_id

1.3.2 實現:分類和商品

create table category(

cid int(32) primary key ,

cname varchar(100) #分類名稱

);create table products (

pid int primary key ,

pname varchar(40) ,

price double ,

category_id int

);alter table products add constraint product_fk foreign key (category_id) references category (cid);

1.3.3 操作

insert into category (cid ,cname) values(1,'服裝');

insert into products (pid,pname) values(1,'商品名稱');

insert into products (pid ,pname ,category_id) values(2,'商品名稱2', 1);

insert into products (pid ,pname ,category_id) values(3,'商品名稱2',9);

delete from category where cid = 1;

1.4 多對多

1.4.1 分析

 商品和訂單多對多關係,將拆分成兩個一對多。

 products商品表,為其中乙個一對多的主表,需要提供主鍵pid

 orders 訂單表,為另乙個一對多的主表,需要提供主鍵oid

 orderitem中間表,為另外新增的第三張表,需要提供兩個外來鍵oid和pid

1.4.2 實現:訂單和商品

create table orders(

oid int primary key ,

totalprice double #總計

);create table orderitem(

oid int,-- 訂單id

pid int(50)-- 商品id

);alter table orderitem add constraint orderitem_orders_fk foreign key (oid) references orders(oid);

alter table orderitem add constraint orderitem_product_fk foreign key (pid) references products(pid);

1.4.3 操作

insert into products (pid,pname) values(3,'商品名稱');

insert into orders (oid ,totalprice) values(1,998);

insert into orders (oid ,totalprice) values(2,100);

insert into orderitem(pid,oid) values(1, 1);

insert into orderitem(pid,oid) values(1, 2);

insert into orderitem(pid,oid) values(2,2);

delete from orderitem where pid=2 and oid = 2;

insert into orderitem(pid,oid) values(2, 3);

delete from products where pid = 1;

資料庫之多表操作

分析步驟 1 先站在左表的角度去找 是否左表的多條記錄可以對應右表的一條記錄,如果是,則證明左表的乙個欄位foreign key 右表乙個字段 通常是id 2 再站在右表的角度去找 是否右表的多條記錄可以對應左表的一條記錄,如果是,則證明右表的乙個欄位foreign key 左表乙個字段 通常是id...

MYSQL資料庫操作 多表操作

將多張表連在一起進行查詢。通過兩個表共有的列去進行拼接。多表連線,首先要在表之間建立連線。連線查詢一共分為以下幾類 交叉連線 內連線外連線 自然連線 將一張表的資料與另外一張表中的資料彼此交叉。也就是說把一張表中的每一行逐個與另一張表去進行匹配。沒有任何連線條件,所有的記錄都會被保留。select ...

資料庫操作 多表查詢

一 關鍵字 join 多表建立交叉連線 cross join。on 關鍵字 後面跟篩選條件。二 分類 內連線 inner jion 外連線 left right join 全連線 union 三 子查詢 子查詢就是select語句巢狀select語句,可以理解為子查詢是一張表 子查詢是將乙個查詢語句...