第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語句,可以理解為子查詢是一張表 子查詢是將乙個查詢語句...