mysql資料庫表關係 資料庫 表關係

2021-10-18 11:28:15 字數 3056 閱讀 4638

上節回顧:

1.建表語法:

注意點:

2.資料型別:

今日內容

1.表之間的關係

多對一,多對多,一對一

2.複製表

分表:為什麼要分表?

乙個表中 要儲存個人資訊又要儲存部門資訊 會導致大量的資料冗餘

所有資料存放在同乙個表中 將導致以下幾個問題

1.浪費空間 不致命

2.結構混亂

3.修改資料時 如果有一百個員工 那就要該一百次 擴充套件性極差

通過分表來解決

分表又造成新的問題 如何再將資料對應起來?

為什麼需要對應起來是因為兩張表的資料具備這某種關係

到底是什麼關係呢?

多對一的關係

分析關聯關係

如何確定表之間的關係 需要從實際需求中分析

第一步:

從員工的角度來考慮

多個員工是不是可以屬於同乙個部門?

員工的多條記錄是否對應部門的一條記錄?

如果是 則可以確定 員工與部門是多對一

第二步:

從部門的角度來考慮

多個部門是不是可以有同乙個員工?

員工部門多條記錄是否對應員工的一條記錄?

都不是 而是乙個部門對應多個員工

也就是 部門與員工之間是一對多

最終我們發現 多個員工對應乙個部門 乙個部門對應多個員工

稱之為單向多對一

如何在資料庫中表示這種關係?

我們可以員工表中儲存部門表的編號

外來鍵約束

問題:此時 我們的表之間存在關聯但是是邏輯上的關聯 並沒有物理上的關聯

換句話說 員工中可以插入不存在的部門編號

如何使其具備物理關聯(硬性的關聯)?

方案:使用外來鍵 foreign key

語法:#建立表時:

create table dept(id,***xx);

create table emp(id,***xx,dept_id,foreign key(dept_id) references dept(id));

#後期修改:

alter table student add foreign key (id) references customer(id);

主從表關係

注意要建立外來鍵關聯,必須先建立主表

先有部門 後又員工 員工屬於部門 部門擁有員工 所以 主表是部門 從表是員工

約束作用:

此時我們在執行新增 更新 刪除時都會受到外來鍵的約束

比如1.員工表中新增乙個不存在的部門id

2.修改某個部門的id

3.刪除某個部門的資料

以上三種操作都會報錯

1.必須已經存在的部門id才能出現在員工表中

2.無法修改 除非把員工全刪掉

3.需要先刪除員工 才能刪除部門

處理起來都非常麻煩

能不能讓主表和從表之間的更刪除同步進行?

如果你是mysql開發者 你應不應該提供這樣的功能?

必須的 這就是級聯操作

級聯操作

有兩種1.級聯更新

指的是主表更新時 從表同步更新

2.級聯刪除

指的是主表刪除時 從表同步刪除

語法:create table emp(id,***xx,dept_id)foreign key(dept_id) references dept(id) on update cascade on delete cascade;

驗證級聯操作

多對多例項分析 什麼情況下會出現多對多的關係

學生表和老師表

多對多的關係本質上是什麼?

是雙向的多對一

如何在資料庫中表示這種關係?

使用外來鍵是不行的,需要建立第三張表專門用於儲存關係

這個第三張表 如何體現關係?

在其中儲存學生和老師的id即可 並且將它們作為外來鍵關聯到學生和老師表

create table t_s_relation(id int primary key auto_increment,t_id int,s_id int,foreign key(t_id) references teacher(t_id),foreign key(s_id) references stu(s_id));

為了去除重複的關係資料 可以給關係表新增主鍵約束 聯合兩個外來鍵

一對一例項分析:

客戶表 與 學生表

乙個客戶對應乙個學生 或沒有成為學生

乙個學生 必然只對應乙個客戶

如何表示這種對應關係 ?

使用外來鍵

那麼外來鍵應該加到哪張表中呢?

因為是先有客戶才有學生 所以 客戶是主表 學生是從表 應該加在學生表中

我們已經知道乙個學生只對應乙個客戶 ,但是有可能你寫的時候寫錯了,寫了乙個重複的客戶id

此時將會造成資料錯亂 如何解決呢?

給外來鍵字段再加上 唯一性約束

三.複製表

create table table_copy select *from t1;

複製資料和表結構,但不會複製key

只想要copy表結構怎麼弄?

create table table_copy select *from t1 where 0 = 1;

給乙個不成立的條件這樣的話就查不到任何資料 ,只能複製表結構

蠕蟲複製

insert into tablename(name) select name from tablename;

mysql關聯式資料庫 關聯式資料庫概述

為什麼需要資料庫?因為應用程式需要儲存使用者的資料,比如word需要把使用者文件儲存起來,以便下次繼續編輯或者拷貝到另一台電腦。要儲存使用者的資料,乙個最簡單的方法是把使用者資料寫入檔案。例如,要儲存乙個班級所有學生的資訊,可以向檔案中寫入乙個csv檔案 id,name,gender,score 1...

關聯式資料庫 定義資料庫表之間的關係

關係型別 你和家人有很多關係。例如,你和你母親是親戚。你只有乙個母親,但她可能有幾個孩子。你和你的兄弟姐妹是親戚 你可能有很多兄弟姐妹,當然,他們也會有很多兄弟姐妹。如果你結婚了,你和你的配偶都有配偶 彼此 但一次只有乙個。資料庫關係非常相似,因為它們是表之間的關聯。關係有三種型別 建立關係 當您開...

關聯式資料庫與非關聯式資料庫

關係型資料庫,是指採用了關係模型來組織資料的資料庫。關係模型是在1970年由ibm的研究員e.f.codd博士首先提出的,在之後的幾十年中,關係模型的概念得到了充分的發展並逐漸成為主流資料庫結構的主流模型。簡單來說,關係模型指的就是二維 模型,而乙個關係型資料庫就是由二維表及其之間的聯絡所組成的乙個...