標籤:表之間 inner 注意 之間 product 拆分 原則 sel 多對多
一、外鍵
1.外鍵:連結兩張表的欄位,通過主表的主鍵和從表的外鍵來描述主外鍵關係,呈現的是一對多的關係。例如:商品類別(一)對商品(多),主表:商品類別表,從表:商品表。
2.外鍵的特點:從表外鍵的值是對主表主鍵的引用、從表外鍵類型必須與主表主鍵類型一致
3.聲明外鍵約束
文法:alter table (從表) add [constraint] (外鍵名稱) foreign key (從表外鍵欄位名) references 主表 (主表的主鍵)
例如:(1).ALTER TABLE product(從表) ADD CONSTRAINT cid(外鍵名稱) FOREIGN KEY (cid)(從表外鍵欄位名) REFERENCES category(主表) (cid)(主表的主鍵);
(2). ALTER TABLE product ADD FOREIGN KEY (cid) REFERENCES category (cid);
[外鍵名稱]用於刪除外鍵約束,一般建議”_fk”結尾
alter table 從表 drop foreign key 外鍵名稱;
3. 使用外鍵的目的:保證資料完整性
4.注意事項:從表外鍵不能添加主表中不存在的記錄、主表不能刪除從表中已經引用的記錄
二、表與表之間的關係
表與表之間的關係,就是表與表資料之間的關係。
1.一對多關聯性:
常見執行個體:客戶和訂單,分類和商品,部門和員工
一對多建表原則:在從表(多方)建立一個欄位,欄位作為外鍵指向主表(一方)的主鍵
文法:ALTER TABLE product ADD FOREIGN KEY (cid) REFERENCES category (cid);
2.多對多關係:
常見執行個體:學生和課程,商品和訂單,人和角色
多對多建表原則:需要建立第三張表,中間表至少要有兩個欄位,這兩個欄位分別作為外鍵指向各自一方的主鍵(就是將一個多對多拆分成兩個一對多)
兩張表分別都是主表,第三張表為從表,提供兩個欄位,都是外鍵。
文法:alter table 從表(stu_course) add foreign key(sno) references stu(sid);
alter table 從表(stu_course) add foreign key(cno) references course(cid);
3.一對一關聯性:(瞭解)
在實際開發中應用不多,因為一對一可以建立成一張表
常見執行個體:公司和地址
兩種原則:外鍵唯一,外鍵是主鍵
三、操作
1.多表查詢
(1).交叉串連查詢(得到兩個表的乘積,基本不使用)
select * from A,B;
(2).內串連查詢(使用關鍵字:inner join -- inner可以省略)
隱式內串連:select * from A,B where 條件;
例如:select * from category c,product p where c.cid=p.cid;
顯式內串連:select * from A inner join B on 條件;
例如:select * from category as c inner join product as p on p.cid=c.cid;
(3).外串連查詢(使用關鍵字outer join --outer可以省略)
左外串連:left outer join
select * from A left outer join B on 條件;
例如:select * from category c left join product p on p.cid=c.cid;
右外串連:right outer join
select * from A right outer join B on 條件;
例如:select * from category c right join product p on p.cid=c.cid;
內串連和外串連的區別:
左外串連:查詢的是左表全部及兩個表的交集
內串連:查詢的是兩個表的交集
右外串連:查詢的是右表全部及兩個表的交集
2.子查詢
一條select語句結果作為另一條select文法的一部分(查詢條件、查詢結果、表等)
例如:查詢化妝品分類上架商品詳情
select * from product where cid =(select cid from category where cname=‘化妝品‘);
MySQL多表