MySQL中盡量少使用外來鍵的原因

2021-09-25 11:47:01 字數 2015 閱讀 7418

mysql設定外來鍵的好處

阻止執行

從表插入新行,其外鍵值不是主表的主鍵值便阻止插入;

從表修改外鍵值,新值不是主表的主鍵值便阻止修改;

主表刪除行,其主鍵值在從表裡存在便阻止刪除(要想刪除,必須先刪除從表的相關行);

主表修改主鍵值,舊值在從表裡存在便阻止修改(要想修改,必須先刪除從表的相關行)。

級聯執行

主表刪除行,連帶從表的相關行一起刪除;

主表修改主鍵值,連帶從表相關行的外鍵值一起修改。兩種方法提供給使用者選擇。無論選取哪種方法,從表裡都不會有多餘行。從另乙個角度理解,用拒絕同一事物在從表中的標誌與主表不一致來實現與主表中的標誌一致。

優勢:

設定外來鍵可以保證資料的完整性與關聯性,杜絕資料冗餘

級聯操作方便,比如涉及乙個離職使用者的所有相關資訊,可以直接刪除這個使用者就能做到所有資訊一起刪除的操作

缺點:主表進行修改或變更,會波及一大片從表,頓時會使公司部分業務處於不可用的狀態,不利中小公司的設計,一般中小型公司都沒有dba,開發人員對資料庫了解的不夠深,容易誤操作,所以建議不用使用過多的外來鍵來操作相關業務表

而且對於insert,   update,   delete等操作時都會先檢查外來鍵的約束條件再操作,效能有所下降

個人對於資料庫表的設計與理解:

由於個人喜好原因,我設計表的時候並不會考慮外來鍵的新增來增加對資料庫操作的複雜性,也不考慮用觸發器去解決級聯操作的問題,因為觸發器的對於表設計而言有一定的隱蔽性,對於後期維護而言有一定的弊端;

解決方案之一:不考慮**量的基礎上,使用**生成器來產生模板**

解決方案之二:可以使用抽象工廠來生產和適配不同表的介面                        

-----修改mysql的表結構 

--修改自增的初始值  使用alter

alter table mytablename auto_increment=1;

由於在資料庫儲存的資料是在硬碟上,相比較於記憶體的執行速率是要慢很多的,因此,可以選擇使用**在邏輯上實現的功能就盡量不要過多地使用外來鍵。在實際開發中,很少會使用到外來鍵約束,會極大的降低表更新的效率。[58到家資料庫30條軍規解讀](

mysql設定外來鍵的好處

阻止執行

從表插入新行,其外鍵值不是主表的主鍵值便阻止插入;

從表修改外鍵值,新值不是主表的主鍵值便阻止修改;

主表刪除行,其主鍵值在從表裡存在便阻止刪除(要想刪除,必須先刪除從表的相關行);

主表修改主鍵值,舊值在從表裡存在便阻止修改(要想修改,必須先刪除從表的相關行)。

級聯執行

主表刪除行,連帶從表的相關行一起刪除;

主表修改主鍵值,連帶從表相關行的外鍵值一起修改。兩種方法提供給使用者選擇。無論選取哪種方法,從表裡都不會有多餘行。從另乙個角度理解,用拒絕同一事物在從表中的標誌與主表不一致來實現與主表中的標誌一致。

優勢:

設定外來鍵可以保證資料的完整性與關聯性,杜絕資料冗餘

級聯操作方便,比如涉及乙個離職使用者的所有相關資訊,可以直接刪除這個使用者就能做到所有資訊一起刪除的操作

缺點:主表進行修改或變更,會波及一大片從表,頓時會使公司部分業務處於不可用的狀態,不利中小公司的設計,一般中小型公司都沒有dba,開發人員對資料庫了解的不夠深,容易誤操作,所以建議不用使用過多的外來鍵來操作相關業務表

而且對於insert,   update,   delete等操作時都會先檢查外來鍵的約束條件再操作,效能有所下降

個人對於資料庫表的設計與理解:

由於個人喜好原因,我設計表的時候並不會考慮外來鍵的新增來增加對資料庫操作的複雜性,也不考慮用觸發器去解決級聯操作的問題,因為觸發器的對於表設計而言有一定的隱蔽性,對於後期維護而言有一定的弊端;

解決方案之一:不考慮**量的基礎上,使用**生成器來產生模板**

解決方案之二:可以使用抽象工廠來生產和適配不同表的介面                        

-----修改mysql的表結構 

--修改自增的初始值  使用alter

alter table mytablename auto_increment=1;

在Spark中盡量少使用GroupByKey函式

為什麼建議盡量在spark 中少用groupbykey,讓我們看一下使用兩種不同的方式去計算單詞的個數,第一種方式使用reducebykey 另外一種方式使用groupbykey,如下 01 user 過往記憶 02 date 2015 05 18 03 time 下午22 26 06 過往記憶部落...

mysql 所有外來鍵 mysql中的外來鍵

mysql中的外來鍵 1.預設的外來鍵存在之後,會對資料進行約束。1 約束1 如果子表中新增的資料,外來鍵字段對應的資料如果在父表中不存在,那麼新增失敗。有資料之後 2 約束2 父表不能刪除 或者修改 乙個被子表引用的資料記錄 3.外來鍵約束 預設的使用者所能看到的約束都是外來鍵的一種約束 嚴格模式...

MySQL 外來鍵及外來鍵的使用

如果公共關鍵字在乙個關係中是主關鍵字,那麼這個公共關鍵字被稱為另乙個關係的外來鍵。由此可見,外來鍵表示了兩個關係之間的相關聯絡。以另乙個關係的外來鍵作主關鍵字的表被稱為主表,具有此外鍵的表被稱為主表的從表。外來鍵又稱作外關鍵字。表間關係有一對一,一對多和多對多。首先我們舉個簡單的栗子 學生表,老師表...