一、外鍵 1.外鍵:鏈接兩張表的欄位,通過主表的主鍵和從表的外鍵來描述主外鍵關係,呈現的是一對多的關係。例如:商品類別(一)對商品(多),主表:商品類別表,從表:商品表。 2.外鍵的特點:從表外鍵的值是對主表主鍵的引用、從表外鍵類型必須與主表主鍵類型一致 3.聲明外鍵約束 語法:alter tabl ...
一、外鍵
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='化妝品');