mysql外來鍵的應用 MySQL外來鍵應用

2021-10-19 19:19:24 字數 1635 閱讀 5732

mysql外來鍵應用,所有tables必須是innodb型,它們不能是臨時表.因為在mysql中只有innodb型別的表才支援外來鍵.

mysql版本:5.5.28

系統平台:rhel 5.8 32位

(1) 外來鍵的使用:

外來鍵的作用,主要有兩個:

乙個是讓資料庫自己通過外來鍵來保證資料的完整性和一致性

乙個就是能夠增加er圖的可讀性

有些人認為外來鍵的建立會給開發時運算元據庫帶來很大的麻煩.因為資料庫有時候會由於沒有通過外來鍵的檢測而使得開發人員刪除,插入操作失敗.他們覺得這樣很麻煩

其實這正式外來鍵在強制你保證資料的完整性和一致性.這是好事兒.

例如:有乙個基礎資料表,用來記錄商品的所有資訊。其他表都儲存商品id。查詢時需要連表來查詢商品的名稱。單據1的商品表中有商品id欄位,單據2的商品表中也有商品id欄位。如果不使用外來鍵的話,當單據1,2都使用了商品id=3的商品時,,如果刪除商品表中id=3的對應記錄後,再檢視單據1,2的時候就會查不到商品的名稱。

當表很少的時候,有人認為可以在程式實現的時候來通過寫指令碼來保證資料的完整性和一致性。也就是在刪除商品的操作的時候去檢測單據1,2中是否已經使用了商品id為3的商品。但是當你寫完指令碼之後系統有增加了乙個單據3 ,他也儲存商品id找個字段。如果不用外來鍵,你還是會出現查不到商品名稱的情況。你總不能每增加乙個使用商品id的字段的單據時就回去修改你檢測商品是否被使用的指令碼吧,同時,引入外來鍵會使速度和效能下降。

(2) 新增外來鍵的格式:

說明:on delete/on update,用於定義delete,update操作.以下是update,delete操作的各種約束型別:

cascade:

外來鍵表中外鍵欄位值會被更新,或所在的列會被刪除.

restrict:

restrict也相當於no action,即不進行任何操作.即,拒絕父表update外來鍵關聯列,delete記錄.

set null:

被父面的外來鍵關聯欄位被update ,delete時,子表的外來鍵列被設定為null.

而對於insert,子表的外來鍵列輸入的值,只能是父表外來鍵關聯列已有的值.否則出錯.

外來鍵定義服從下列情況:(前提條件)

1)所有tables必須是innodb型,它們不能是臨時表.因為在mysql中只有innodb型別的表才支援外來鍵.

2)所有要建立外來鍵的字段必須建立索引.

3)對於非innodb表,foreign key子句會被忽略掉。

注意:建立外來鍵時,定義外鍵名時,不能加引號.

如: constraint 'fk_1' 或 constraint "fk_1"是錯誤的

(3) 檢視外來鍵:

show create table tb_name;

可以檢視到新建的表的**以及其儲存引擎.也就可以看到外來鍵的設定.

刪除外來鍵:

alter table tb_name drop foreign key '外鍵名';

注意:只有在定義外來鍵時,用constraint 外鍵名 foreign key .... 方便進行外來鍵的刪除.

若不定義,則可以:

先輸入:alter table tb_name drop foreign key -->會提示出錯.此時出錯資訊中,會顯示foreign key的系統缺省外鍵名.--->

用它去刪除外來鍵.

MySQL 外來鍵應用

1 mysql 引擎 圖1.png 如果innodb狀態不可用,可參考此文啟用.2 建立主表 create table parent id int not null,primary key id engine innodb 3 建立從表create table child id int,parent...

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

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

mysql 外來鍵 del 記錄 MySQL 外來鍵

在mysql中 1 mysql 資料表主要支援六種型別 分別是 bdb heap isam merge myisam innobdb。這六種又分為兩類,一類是 事務安全型 transaction safe 包括bdb和innodb 其餘都屬於第二類,稱為 非事務安全型 non transaction...