建立數(shù)據(jù)庫的六個步驟 mysql怎么設(shè)置外鍵?
mysql怎么設(shè)置外鍵?外鍵的設(shè)計初衷是為了在數(shù)據(jù)庫端保證對邏輯上相關(guān)聯(lián)的表數(shù)據(jù)在操作上的一致性與完整性。優(yōu)點:精簡關(guān)聯(lián)數(shù)據(jù),減少數(shù)據(jù)冗余避免后期對大量冗余處理的額外運維操作。降低應(yīng)用代碼復(fù)雜性,減少
mysql怎么設(shè)置外鍵?
外鍵的設(shè)計初衷是為了在數(shù)據(jù)庫端保證對邏輯上相關(guān)聯(lián)的表數(shù)據(jù)在操作上的一致性與完整性。
優(yōu)點:
- 精簡關(guān)聯(lián)數(shù)據(jù),減少數(shù)據(jù)冗余避免后期對大量冗余處理的額外運維操作。
- 降低應(yīng)用代碼復(fù)雜性,減少了額外的異常處理相關(guān)數(shù)據(jù)管理全由數(shù)據(jù)庫端處理。
- 增加文檔的可讀性特別是在表設(shè)計開始,繪制 ER 圖的時候,邏輯簡單明了,可讀性非常強(qiáng)。
- 缺點:
- 性能壓力外鍵一般會存在級聯(lián)功能,級聯(lián)更新,級聯(lián)刪除等等。在海量數(shù)據(jù)場景,造成很大的性能壓力。比如插入一條新記錄,如果插入記錄的表有 10 個外鍵,那勢必要對關(guān)聯(lián)的 10 張表逐一檢查插入的記錄是否合理,延誤了正常插入的記錄時間。并且父表的更新會連帶子表加上相關(guān)的鎖。
- 其他功能的靈活性不佳比如,表結(jié)構(gòu)的更新等。
外鍵參照動作列表:
- CASCADE:級聯(lián),子表跟隨父表更新外鍵值
- SET NULL:子表更隨主表更新外鍵值為 NULL
- RESTRICT/ NO ACTION:默認(rèn),限制父表改動外鍵值
- SET DEFAULT:目前產(chǎn)生的效果和 RESTRICT 相同。
mysql怎么查看表是否設(shè)置了外鍵?
#查看數(shù)據(jù)庫所有表SELECT tba.TABLE_NAME FROM information_schema.TABLES tba WHERE tba.TABLE_SCHEMA= "你要查的數(shù)據(jù)庫名字"#查看某個庫中的一個表是哪些表的外鍵SELECT TABLE_NAME FROM KEY_COLUMN_USAGE WHERE CONSTRAINT_NAME="FK_PRODUCT_ID" AND REFERENCED_TABLE_NAME ="表的名字"AND REFERENCED_TABLE_SCHEMA="表的的數(shù)據(jù)名字"