mysql实体_mysql实体关系
實(shí)體關(guān)系
表設(shè)計(jì)
1:1
兩個(gè)實(shí)體表內(nèi),存在相同的主鍵字段
如果記錄的主鍵值等于另一個(gè)關(guān)系表內(nèi)記錄的主鍵值,則兩條記錄的對應(yīng)為一一對應(yīng)
優(yōu)化上稱為垂直分割
1:n
一個(gè)實(shí)體對應(yīng)多個(gè)其他實(shí)體(一個(gè)班級對應(yīng)多個(gè)學(xué)生)
設(shè)計(jì):在多的那段增加一個(gè)字段,用于指向該實(shí)體所屬的另外實(shí)體的標(biāo)識(shí)
M:n
多對多
設(shè)計(jì)典型的利用一個(gè)中間表表示實(shí)體之間的對應(yīng)關(guān)系。中間表的每一條記錄表示一個(gè)關(guān)系。
可以分析:一個(gè)m:n可拆解為?1:m? 1:n來實(shí)現(xiàn)
外鍵 foreign key
概念:如果一個(gè)實(shí)體(student)的某個(gè)字段(student:class_id)指向(引用)另一個(gè)實(shí)體(class)的主鍵(class:class_id)
就稱student實(shí)體的class_id是這兩個(gè)實(shí)體關(guān)聯(lián)的外鍵。
被指向的實(shí)體稱為主實(shí)體(主表),也叫父實(shí)體(父表)
負(fù)責(zé)指向的實(shí)體稱為從實(shí)體(從表),也叫子實(shí)體(子表)
一般在哪個(gè)表里定義外鍵 這個(gè)表就是子表
作用:
約束處于關(guān)系內(nèi)的實(shí)體
增加子表記錄時(shí),是否有與之對應(yīng)的父表記錄。刪除和更新主表記錄時(shí),從表應(yīng)該如何處理與之相關(guān)的記錄。
定義一個(gè)外鍵
在從表上增加一個(gè)外鍵字段,指向主表的主鍵??使用關(guān)鍵字?foreign key
Foreign key (外鍵字段) references?主表名?(關(guān)聯(lián)字段) [主表記錄刪除時(shí)動(dòng)作][主表記錄更新時(shí)記錄]
建完表后插入
在子表增加記錄時(shí),父表中必須有與之對應(yīng)的記錄存在
設(shè)置級聯(lián)操作
在主表數(shù)據(jù)發(fā)生改變時(shí),與之關(guān)聯(lián)的從表數(shù)據(jù)該如何變化
主表更新
主表刪除
使用關(guān)鍵字on update,on delete來標(biāo)識(shí)
允許的級聯(lián)操作:
Cascade:關(guān)聯(lián)操作如果主表被刪除,那么從表也會(huì)執(zhí)行相關(guān)的操作
Set null :?設(shè)置為null表示從表不指向任何主表記錄
Restrict :拒絕主表的相關(guān)操作
修改外鍵:先刪除再新建外鍵,通過修改表來完成。
Alter table student drop foreign key (class_id)?有問題
刪除外鍵需要通過指定外鍵名達(dá)到目的
可以通過創(chuàng)建外鍵時(shí)指定名稱或者使用Mysql默認(rèn)生成的名稱
新建外鍵:
Alter table student add foreign key (class_id) references class (class_id)
On delete set null
注意關(guān)聯(lián)的字段必須類型一致
在class_id定義時(shí)要能為null
On update指的是只有主表的主鍵發(fā)生變化,才能對從表產(chǎn)生影響。
現(xiàn)在表中數(shù)據(jù)默認(rèn)都是restrict show?里默認(rèn)不顯示
Php實(shí)際項(xiàng)目中只有關(guān)聯(lián),不設(shè)置外鍵,刪除或更新時(shí)通過sql語句疊加操作
有名無實(shí),在支持外鍵的存儲(chǔ)引擎表中才能使用(只有innodb)
總結(jié)
以上是生活随笔為你收集整理的mysql实体_mysql实体关系的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: mysql中的参数如何调试_mysql
- 下一篇: 重新安装mysql5.7.21_linu