如何找出兩張表的對應關係
分析步驟:
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示例
mysql 關係表 MySQL表關係的理解
關係型資料庫表之間存在各種各樣的聯絡,及一對多,多對一,多對多。這裡主要講下一對多,為什麼要建立表之間的關聯。一對多的定義 一對多關係 一對多關係是關聯式資料庫中兩個表之間的一種關係,該關係中第乙個表中的單個行可以與第二個表中的乙個或多個行相關,但第二個表中的乙個行只可以與第乙個表中的乙個行相關。一...
mysql 表參照關係 MYSQL表關係
表關係 一 外來鍵 foreign key 作用 約束當前表的某列值必須取自於另一張表的主鍵列值 外來鍵所在的列稱之為 外來鍵列 外來鍵所在的表稱之為 外來鍵表 或 子表 被外來鍵列所引用的表稱之為 主表 或 主鍵表 語法 1.建立表的同時指定外來鍵 create table 字段 型別,const...
mysql 關係 MySQL之表關係
mysql表關係 一對多關係 一對多與多對一是乙個概念,指的是乙個實體的某個資料與另外乙個實體的多個資料有關聯關係。舉例,學校中乙個學 院可以有很多的學生,而乙個學生只屬於某乙個學院 通常情況下 學院與學生之間的關係就是一對多的關係,通過外來鍵關聯來實現這種關係。建立學院表 mysql create...