使用SSMS資料庫管理工具修改FOREIGN KEY限制
1、連接配接資料庫,選擇資料表-》右鍵點選-》選擇設計(或者展開鍵,選擇要修改的外鍵,右鍵點選,選擇修改,後面修改步驟相同)。

2、在表設計視窗中-》選擇要修改的外鍵列-》右鍵點選-》選擇關系。
3、在外鍵關系彈出框中-》選中要修改的外鍵-》點選修改表和列規範。
4、在表和列彈出框中-》輸入要修改的外建名-》選擇要修改的主鍵基表-》選擇要修改的主鍵基表的資料列-》選擇要修改的外鍵基表-》選擇要修改的外鍵基表資料列-》點選确定。
5、在外鍵關系彈出框中-》輸入要修改的外鍵名稱-》輸入要修改的外鍵描述-》表設計規則可根據實際情況選擇-》點選關閉。
6、點選儲存(或者ctrl+s)-》關閉表設計器-》重新整理表-》打開外鍵檢視修改結果。
使用T-SQL腳本修改FOREIGN KEY限制
若要使用Transact-SQL修改FOREIGN KEY限制,必須先删除現有的FOREIGN KEY限制,然後再用新定義重新建立該限制。
文法:
--聲明資料庫
use 資料庫名;
go
--判斷如果存在外鍵則删除
if exists(select * from sysobjects where name=限制名)
alter table 表名 drop constraint 限制名;
--添加外鍵限制
alter table 表名 --外鍵基表,顯示哪個表包含用作所選關系中外鍵的列。
[with check | with nocheck] --強制用于複制,訓示當複制代理對此表執行插入、更新或删除操作時是否強制限制。
add constraint 限制名--辨別類别,外鍵名稱。
foreign key(列名) --外鍵列,顯示哪個列用作所選關系的外鍵。
references 表名--主/唯一鍵基表,顯示哪個表包含用作所選關系中主鍵(或唯一鍵)的列。
(列名) --主/唯一鍵列,顯示哪個列用作所選關系的主鍵(或唯一鍵)。
--更新規則
--no action:不執行任何操作,錯誤消息告知使用者不允許進行更新并将復原 UPDATE。
--cascade:級聯,更新所有包含外鍵關系所涉及資料的行。 如果該表将包含在使用邏輯記錄的合并釋出中,則不要指定 CASCADE。
--set null:設定null,如果表的所有外鍵列都可接受 Null 值,則将該值設定為 Null。
--set default:設定預設值,如果表的所有外鍵列均已定義預設值,則将值設定成為該列定義的預設值。
on update [no action | cascade | set null | set default]
--删除規則
--no action:不執行任何操作,錯誤消息告知使用者不允許進行删除并将復原 DELETE。
--cascade:級聯,删除所有包含外鍵關系所涉及資料的行。 如果該表将包含在使用邏輯記錄的合并釋出中,則不要指定 CASCADE。
--set default:設定預設值,如果表的所有外鍵列均已定義預設值,則将值設定成為該列定義的預設值。
on delete [no action | cascade | set null | set default]
--強制外鍵限制
--訓示如果對關系中列資料的更改會使外鍵關系的完整性失效,是否允許進行這樣的更改。 如果不允許這樣的更改,則選擇 “是” ;如果允許這樣的更改,則選擇 “否” 。
alter table 表名 [nocheck | check] constraint 限制名;
--添加外鍵限制描述
execute sp_addextendedproperty N'MS_Description',N'限制描述',N'schema',N'dbo',N'table',N'表名',N'constraint',N'限制名';
示例:
use testss;
if exists(select * from sysobjects where name='foreign1')
alter table test1 drop constraint foreign1;
alter table test1 --外鍵基表,顯示哪個表包含用作所選關系中外鍵的列。
with check --強制用于複制,訓示當複制代理對此表執行插入、更新或删除操作時是否強制限制。
add constraint foreign1 --辨別類别,外鍵名稱。
foreign key(classid) --外鍵列,顯示哪個列用作所選關系的外鍵。
references test2 --主/唯一鍵基表,顯示哪個表包含用作所選關系中主鍵(或唯一鍵)的列。
(id) --主/唯一鍵列,顯示哪個列用作所選關系的主鍵(或唯一鍵)。
on update cascade
on delete cascade
alter table test1 nocheck constraint foreign1;
execute sp_addextendedproperty N'MS_Description',N'修改外鍵限制',N'schema',N'dbo',N'table',N'test1',N'constraint',N'foreign1';
修改FOREIGN KEY優缺點
優點:
1、保證資料的完整性。
2.、關聯查詢時,可以用到FK 的統計資訊。
3、合理使用外鍵,可以增加查詢效率。
缺點:
1、删隊或更新關聯資料時需要做檢查,效率會很低。
2、資料量很大,并發量很大,會影響性能。
3、外鍵雖然保證完整性,但是對于主表删除這種操作,都級聯掃描一遍所有的子表取删除,資料越大越慢,鎖粒度也會大。
4、導入導出,其它高可用等手工調資料時非常麻煩給。