表與表直接由於存在外來鍵約束而導致刪除操作失敗

2021-08-21 06:07:14 字數 1231 閱讀 9220

在我的資料中,有兩張表,一張是light,一張是collector.

下圖是light表,裡面的字段collectorid是表collector的主鍵,對於light表來說,collectorid是它的外來鍵:

下圖是collector表,collectorid是這個表的主鍵,

在microsoft sql server management studio中,建立乙個外來鍵的步驟如下圖所示:

在需要建立外來鍵的表上(light)上,右鍵->選擇新建外來鍵:

選擇表和列規範:

選擇主鍵表為collector,外來鍵表為light(為什麼light是外來鍵表呢??因為對light來說,collecrorid是它的外來鍵)。

選擇刪除規則為級聯(casecade),如果不選擇級聯會出現什麼問題呢?考慮下面的場景,現在需要刪除collector中某些資料,但是由於collectorid是light表的外來鍵,也就是light還在引用要刪除資料的collectorid,這樣就會出現刪除失敗的情況,為了避免這種情況出現,我們就要選擇外來鍵的刪除規則為級聯(cascade)方式,這樣在刪除collector表中的資料時,所以引用colletorid的light中的資料就會被自動的刪除。

在我的專案中出現的問題如下圖所示:

上面頁面顯示的資料就是來自於collector,由於當時light選擇了collector的collectorid作為它的外來鍵,但是有沒有在建立light外來鍵的時候選擇級聯方式,所以就出現了刪除失敗的情況。

查詢MySQL中所有存在外來鍵的表

注意 information schema.key column usage table schema referenced table name等都是mysql系統中的名稱 由於最近公司讓遷移彈性資料庫,但是彈性庫對外鍵的支援不太友好,因此需要統計所有表中存在的外來鍵,以方便做遷移處理。一 查詢系...

表的完整性約束 外來鍵約束

先建立父表 部門表 create table department dno int 4 primary key auto increment,dname varchar 10 not null,room char 4 注意 外來鍵約束只有表級約束,沒有列級約束 方法一 建立表的時候新增外來鍵約束 c...

表的完整性約束 外來鍵約束

先建立父表 部門表 create table department dno int 4 primary key auto increment,dname varchar 10 not null,room char 4 注意 外來鍵約束只有表級約束,沒有列級約束 方法一 建立表的時候新增外來鍵約束 c...