sql語句之多表關系 一對多 多對多


多表的關系介紹

在實際的開發過程中,項目一定是有多張表的,且這些表之間是都有關系的
表與表之間的關系分類:一對一 一對多 多對多
一對一:A表的一行對應B表的一行,反之也成立,此時,兩張表可以合並成一張表

一對多:A表的一行對應B表的多行,反之不成立

多對多:A表的一行對應B表的多行,B表的一行對應A表的多行

多表的關系-一對多關系

初始化數據
一對多的創建流程

》創建主表(分類表)
》創建從表(商品表)
》給主表和從表之間添加外鍵約束
alter table 從表 add [constraint] [外鍵名稱] foreign key (從表外鍵字段名) references 主表 (主表的主鍵);
》給主表添加數據(隨便添加)
》給從表添加數據(添加數據是必須依賴主表)
(3)一對多特點
添加數據: 主表:隨意添加,從表:受主表限制
刪除數據: 主表:如果某一行的數據受到從表的依賴,則不能刪除, 從表:可以隨意刪除
#創建主表(分類表)
CREATE TABLE category(
cid INT PRIMARY KEY AUTO_INCREMENT,
cname VARCHAR(20)
);
#創建從表(產品表)
CREATE TABLE product(
pid INT PRIMARY KEY AUTO_INCREMENT,
pname VARCHAR(20),
price DOUBLE,
cid INT -- 外鍵 表示屬於哪個分類
);

》給主表和從表之間添加外鍵約束
`alter table 從表 add [constraint] [外鍵名稱] foreign key (從表外鍵字段名) references 主表 (主表的主鍵);`
alter table product add foreign key (cid) references category(cid)
》給主表添加數據
insert into category value(null,'電子')
insert into category value(null,'服裝')
》給從表添加數據(添加數據是必須依賴主表)
insert into product value(null,'聯想',2000,1)
insert into product value(null,'華為',4000,1)
insert into product value(null,'真維斯',100,2)

多表的關系-多對多關系

多對多創建流程
》》創建訂單表(主表) order
》》創建中間表(從表) 保存交叉線
》》給中間表建立外鍵約束(2次)
》》給訂單表添加數據(隨意)
》》給中間表添加數據(受限)
#創建從表(產品表)
CREATE TABLE product(
pid INT PRIMARY KEY AUTO_INCREMENT,
pname VARCHAR(20),
price DOUBLE,
cid INT -- 外鍵 表示屬於哪個分類
);
CREATE TABLE orders(
oid INT PRIMARY KEY AUTO_INCREMENT,
money DOUBLE
);
CREATE TABLE product(
pid INT PRIMARY KEY AUTO_INCREMENT,
pname VARCHAR(20),
price DOUBLE,
cid INT -- 外鍵 表示屬於哪個分類
)
INSERT INTO product VALUE(NULL,'聯想',2000,1)
INSERT INTO product VALUE(NULL,'華為',4000,1)
INSERT INTO product VALUE(NULL,'真維斯',100,2)
CREATE TABLE orders_product(
oid INT , -- 必須存在 外鍵
pid INT -- 必須存在 外鍵
);
#給中間表建立外鍵約束(2次)
ALTER TABLE orders_product ADD FOREIGN KEY(oid) REFERENCES orders(oid);
ALTER TABLE orders_product ADD FOREIGN KEY(pid) REFERENCES product(pid);

 


多對多(演員與角色的關系)

創建表:多對多的關系(演員表與角色表)
》》 創建演員表(左側主表)
》》 創建角色表(右側主表)
》》創建中間表(從表)
》》建立外鍵約束(2次)
》》給演員表添加數據
》》給角色表添加數據
》》給中間表添加數據
# 創建演員表(左側主表)
CREATE TABLE users(
uid INT PRIMARY KEY AUTO_INCREMENT,
uname VARCHAR(20)
)
# 創建角色表(右側主表)
CREATE TABLE role(
rid INT PRIMARY KEY AUTO_INCREMENT,
rname VARCHAR(20)
)
# 創建中間表(從表)
CREATE TABLE users_role(
rid INT , -- 數據必須在role存在
uid INT -- 數據必須在users存在
)
#建立外鍵約束兩次
ALTER TABLE users_role ADD FOREIGN KEY(rid) REFERENCES role(rid);
ALTER TABLE users_role ADD FOREIGN KEY(uid) REFERENCES users(uid);


總結

要分析表與表之間的關系是屬於一對多還是多對多
————————————————
版權聲明:本文為CSDN博主「然木酥」的原創文章,遵循CC 4.0 BY-SA版權協議,轉載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/xinxin_____/article/details/108760670


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM