在MySQL資料庫建立多對多的資料表關係

2021-10-23 09:10:17 字數 2130 閱讀 7210

一、問題:

在業務中遇到這樣的情況 :我有兩張無關表student和course。

student表中的字段是 stu_id 和stu_name。如圖:

course表中的字段是cour_id和cour_name。如圖:

我想要查詢某個同學選了哪些課某門課被哪些同學選了。這是資料庫中典型的多對多的問題,

二、解決:

此時應當形成第三張關聯表。這裡三張表的字元編碼應該相同。

create table stu_cour(

sc_id int primary key auto_increment,

stu_name varchar(10),

cour_name varchar(20)

)charset utf8;

這裡需要給第三張表新增約束條件。關於約束條件參照:

我們要用的是多對多的關係。對我們這個案例來說,就是要給stu_cour表新增外來鍵約束條件

alter table stu_cour add constraint stu_fk1 foreign key (stu_name) 

references student (stu_name);

即stu_cour表中的stu_name受student中的stu_name的約束。但是這裡會報錯:

查詢得知:外來鍵表和主鍵表中的資料型別要一致,另外,主鍵表中被外來鍵引用的資料列要設為unique才行。

我們表中被引用的資料型別都一樣,都是varchar,因此大概率就是第二個原因了。

student中的stu_name被stu_cour引用了,因此把student中的stu_name改為unique

即:

alter table student modify stu_name varchar(10) not null unique;
這裡再次執行:

alter table stu_cour add constraint stu_fk1 foreign key (stu_name) 

references student (stu_name);

已經ok了,course處理方式同理,切記,這裡三張表的字元編碼應該相同

讓我們愉快地來測試一下吧。

student表:

course表:

stu_cour表:這裡無需輸入stu_name和cour_name,可以在表student和表course中選擇

查詢誰都選了高等數學:

select * from stu_cour where cour_name='高等數學';

再查詢一下,宋同學選了哪些課。

select * from stu_cour where stu_name='宋xx';

ok,解決了。

資料庫表多對多的設計

先上問題!現在有a b c三張表,a和b是一對多的關係,b和c是一對一的關係,c和b是一對多的關係,a和c是多對多的關係。問題 是否設計第四張表專門存放a b c的關係,還是把關係維護在b表中?原則 首先在資料庫中不建議建立三維關係。其實就是說一張表 關係表 不要維繫三個模型的的關係 設計思路er圖...

資料庫中的多對多的查詢

使用mybatis的問題呢,就得自己寫sql,當然使用mybatis generator 也能生成一部分,但一些就得自己寫。使用hibernate 與jpa 就很少需要寫了。不過不太靈活,比較繁瑣。可能只需要乙個簡單的sql語句就解決的問題就需要配置兩個物件之間的關聯關係,這個關聯關係在一些情況下不...

flask 定義資料庫關係(多對多)

多對多 我們使用學生和老師來演示多對多關係 每個學生有多個老師,每個老師有多個學生。多對多關係示意圖如下 在例項程式中,student類表示學生,teacher類表示老師。在這兩個模型之間建立多對多關係後,我們需要在student類中新增乙個集合關係屬性teachers,呼叫它可以獲取某個學生的多個...