mysql實體關系(mysql學習五)


實體關系

 表設計

1:1

兩個實體表內,存在相同的主鍵字段

如果記錄的主鍵值等於另一個關系表內記錄的主鍵值,則兩條記錄的對應為一一對應

優化上稱為垂直分割

1n

一個實體對應多個其他實體(一個班級對應多個學生)

設計:在多的那段增加一個字段,用於指向該實體所屬的另外實體的標識

 

M:n

多對多

設計典型的利用一個中間表表示實體之間的對應關系。中間表的每一條記錄表示一個關系。

 可以分析:一個m:n可拆解為 1:m  1:n來實現

外鍵 foreign key

概念:如果一個實體(student)的某個字段(student:class_id)指向(引用)另一個實體(class)的主鍵(class:class_id)

就稱student實體的class_id是這兩個實體關聯的外鍵。

被指向的實體稱為主實體(主表),也叫父實體(父表)

負責指向的實體稱為從實體(從表),也叫子實體(子表)

一般在哪個表里定義外鍵 這個表就是子表

作用:

約束處於關系內的實體

  增加子表記錄時,是否有與之對應的父表記錄。刪除和更新主表記錄時,從表應該如何處理與之相關的記錄。

定義一個外鍵

在從表上增加一個外鍵字段,指向主表的主鍵  使用關鍵字 foreign key

Foreign key (外鍵字段) references 主表名 (關聯字段) [主表記錄刪除時動作][主表記錄更新時記錄]

 

 

 

建完表后插入

在子表增加記錄時,父表中必須有與之對應的記錄存在

 

設置級聯操作

 

 在主表數據發生改變時,與之關聯的從表數據該如何變化

 

主表更新

 

主表刪除

 

使用關鍵字on update,on delete來標識

 

允許的級聯操作:

 

 Cascade:關聯操作如果主表被刪除,那么從表也會執行相關的操作

 

 Set null : 設置為null表示從表不指向任何主表記錄

 

 Restrict :拒絕主表的相關操作

 

修改外鍵:先刪除再新建外鍵,通過修改表來完成。

 

Alter table student drop foreign key (class_id) 有問題

 

刪除外鍵需要通過指定外鍵名達到目的

 

可以通過創建外鍵時指定名稱或者使用Mysql默認生成的名稱

 

新建外鍵:

Alter table student add foreign key (class_id) references class (class_id)

 On delete set null

注意關聯的字段必須類型一致

 

class_id定義時要能為null

 

On update指的是只有主表的主鍵發生變化,才能對從表產生影響。

現在表中數據默認都是restrict show 里默認不顯示

Php實際項目中只有關聯,不設置外鍵,刪除或更新時通過sql語句疊加操作

有名無實,在支持外鍵的存儲引擎表中才能使用(只有innodb

 


免責聲明!

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



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