mysql 中表與表之間的關系


如何找出兩張表的對應關系

分析步驟:

1.先找出左表的角度去找

​ 是否左表的多條記錄可以對應右表的一條記錄,如果是,則證明左表的一個字段foreign key 右表一個字段 (通常是id)

2.再站在右表的角度去找

​ 是否右表的多條記錄可以對應左表的一條記錄,如果是,則證明右表的一個字段foreign key 左表一個字段(通常是id)

3.總結
多對一

如果只有步驟1成立,則是左表多對一右表
如果只有步驟2成立,則是右表多對一左表

多對多

如果步驟1和2同時成立,則證明這兩張表時一個雙向的多對一,即多對多,需要定義一個這兩張表的關系表來專門存放二者的關系

一對一

如果1和2都不成立,而是左表的一條記錄唯一對應右表的一條記錄,反之亦然。這種情況很簡單,就是在左表foreign key右表的基礎上,將左表的外鍵字段設置成unique即可

建立表之間的關系

一對多 多對一
一對多或稱為多對一

三張表:出版社,作者信息,書

一對多(或多對一):一個出版社可以出版多本書

關聯方式:foreign key

代碼如下

create table press(
id int primary key auto_increment,
name varchar(20)      創建了一個 press 表
);

create table book(
id int primary key auto_increment,
name varchar(20),
press_id int not null,
foreign key(press_id) references press(id)
on delete cascade
on update cascade
);                   創建了和上一個表有關系的 book 表


insert into press(name) values    在 press 表中加入元素
('北京工業地雷出版社'),
('人民音樂不好聽出版社'),
('知識產權沒有用出版社')
;

insert into book(name,press_id) values
('九陽神功',1),
('九陰真經',2),
('九陰白骨爪',2),
('獨孤九劍',3),
('降龍十巴掌',2),
('葵花寶典',3)
;

**一對多舉個例子 : 班級和學生 **

一個班級可以對應多個學生,但是一個學生只能對應一個班級

主機和機房

一個機房可以有多個主機,但是一個主機只能有一個機房

多對多
多對多
三張表:出版社,作者信息,書

多對多:一個作者可以寫多本書,一本書也可以有多個作者,雙向的一對多,即多對多
  
關聯方式:foreign key+一張新的表

多對多的關系中就必須產生第三張表  放在前兩張表中的話,太籠統了,所以需要第三張表來清晰一下
create table author(
id int primary key auto_increment,
name varchar(20)
);


#這張表就存放作者表與書表的關系,即查詢二者的關系查這表就可以了
create table author2book(
id int not null unique auto_increment,
author_id int not null,
book_id int not null,
constraint fk_author foreign key(author_id) references author(id)
on delete cascade
on update cascade,
constraint fk_book foreign key(book_id) references book(id)
on delete cascade
on update cascade,
primary key(author_id,book_id)
);


#插入四個作者,id依次排開
insert into author(name) values('egon'),('alex'),('yuanhao'),('wpq');

#每個作者與自己的代表作如下
egon: 
九陽神功
九陰真經
九陰白骨爪
獨孤九劍
降龍十巴掌
葵花寶典
alex: 
九陽神功
葵花寶典
yuanhao:
獨孤九劍
降龍十巴掌
葵花寶典
wpq:
九陽神功


insert into author2book(author_id,book_id) values
(1,1),
(1,2),
(1,3),
(1,4),
(1,5),
(1,6),
(2,1),
(2,6),
(3,4),
(3,5),
(3,6),
(4,1)
;

**多對多舉例 : **

服務和機器:

一個服務可能被部署到多台機器上,一台機器上也可以部署多個任務

學生和課程 :

一個學生可以選擇多門課程,一個課程也可以被多個學生選擇

一對一

兩張表:學生表和客戶表

一對一 : 一個學生一個客戶

關聯方式:foreign key+unique
create table customer(
    -> id int primary key auto_increment,
    -> name varchar(20) not null,
    -> qq varchar(10) not null,
    -> phone char(16) not null
    -> );

create table student(
    -> id int primary key auto_increment,
    -> class_name varchar(20) not null,
    -> customer_id int unique, #該字段一定要是唯一的
    -> foreign key(customer_id) references customer(id) #外鍵的字段一定要保證unique
    -> on delete cascade
    -> on update cascade
    -> );

#增加客戶
mysql> insert into customer(name,qq,phone) values
    -> ('韓蕾','31811231',13811341220),
    -> ('楊瀾','123123123',15213146809),
    -> ('翁惠天','283818181',1867141331),
    -> ('楊宗河','283818181',1851143312),
    -> ('袁承明','888818181',1861243314),
    -> ('袁清','112312312',18811431230)

mysql> #增加學生
mysql> insert into student(class_name,customer_id) values
    -> ('脫產1班',3),
    -> ('周末1期',4),
    -> ('周末1期',5)
    -> ;

sql示例


免責聲明!

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



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