天天看點

SQLServer之修改FOREIGN KEY限制使用SSMS資料庫管理工具修改FOREIGN KEY限制使用T-SQL腳本修改FOREIGN KEY限制修改FOREIGN KEY優缺點

原文: SQLServer之修改FOREIGN KEY限制

使用SSMS資料庫管理工具修改FOREIGN KEY限制

1、連接配接資料庫,選擇資料表-》右鍵點選-》選擇設計(或者展開鍵,選擇要修改的外鍵,右鍵點選,選擇修改,後面修改步驟相同)。

SQLServer之修改FOREIGN KEY限制使用SSMS資料庫管理工具修改FOREIGN KEY限制使用T-SQL腳本修改FOREIGN KEY限制修改FOREIGN KEY優缺點
SQLServer之修改FOREIGN KEY限制使用SSMS資料庫管理工具修改FOREIGN KEY限制使用T-SQL腳本修改FOREIGN KEY限制修改FOREIGN KEY優缺點

2、在表設計視窗中-》選擇要修改的外鍵列-》右鍵點選-》選擇關系。

SQLServer之修改FOREIGN KEY限制使用SSMS資料庫管理工具修改FOREIGN KEY限制使用T-SQL腳本修改FOREIGN KEY限制修改FOREIGN KEY優缺點

3、在外鍵關系彈出框中-》選中要修改的外鍵-》點選修改表和列規範。

SQLServer之修改FOREIGN KEY限制使用SSMS資料庫管理工具修改FOREIGN KEY限制使用T-SQL腳本修改FOREIGN KEY限制修改FOREIGN KEY優缺點

4、在表和列彈出框中-》輸入要修改的外建名-》選擇要修改的主鍵基表-》選擇要修改的主鍵基表的資料列-》選擇要修改的外鍵基表-》選擇要修改的外鍵基表資料列-》點選确定。

SQLServer之修改FOREIGN KEY限制使用SSMS資料庫管理工具修改FOREIGN KEY限制使用T-SQL腳本修改FOREIGN KEY限制修改FOREIGN KEY優缺點

5、在外鍵關系彈出框中-》輸入要修改的外鍵名稱-》輸入要修改的外鍵描述-》表設計規則可根據實際情況選擇-》點選關閉。

SQLServer之修改FOREIGN KEY限制使用SSMS資料庫管理工具修改FOREIGN KEY限制使用T-SQL腳本修改FOREIGN KEY限制修改FOREIGN KEY優缺點

6、點選儲存(或者ctrl+s)-》關閉表設計器-》重新整理表-》打開外鍵檢視修改結果。

SQLServer之修改FOREIGN KEY限制使用SSMS資料庫管理工具修改FOREIGN KEY限制使用T-SQL腳本修改FOREIGN KEY限制修改FOREIGN KEY優缺點

使用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';

SQLServer之修改FOREIGN KEY限制使用SSMS資料庫管理工具修改FOREIGN KEY限制使用T-SQL腳本修改FOREIGN KEY限制修改FOREIGN KEY優缺點

修改FOREIGN KEY優缺點

優點:

1、保證資料的完整性。

2.、關聯查詢時,可以用到FK 的統計資訊。

3、合理使用外鍵,可以增加查詢效率。

缺點:

1、删隊或更新關聯資料時需要做檢查,效率會很低。

2、資料量很大,并發量很大,會影響性能。

3、外鍵雖然保證完整性,但是對于主表删除這種操作,都級聯掃描一遍所有的子表取删除,資料越大越慢,鎖粒度也會大。

4、導入導出,其它高可用等手工調資料時非常麻煩給。