SQLServer之修改PRIMARY KEY

使用SSMS數據庫管理工具修改PRIMARY KEY

一、鏈接數據庫,選擇數據表-》右鍵點擊-》選擇設計(或者展開鍵,選擇要修改的鍵,右鍵點擊,選擇修改,後面步驟相同)。數據庫

clipboard.png

clipboard.png

二、選擇要修改的數據列-》右鍵點擊-》選擇索引/鍵。安全

clipboard.png

三、在索引/鍵彈出框中-》選擇要修改的主鍵-》類型選擇主鍵-》點擊列。工具

clipboard.png

四、在索引列彈出框中-》選擇主鍵數據列-》選擇主鍵的排序規則-》點擊肯定。spa

clipboard.png

五、在索引/鍵彈出框中-》輸入要修改的主鍵名稱-》輸入要修改的主鍵描述-》表設計器規則可使用系統默認-》點擊關閉。設計

clipboard.png

六、點擊保存(或者ctrl+s)-》關閉表設計器-》刷新表-》查看修改結果。排序

clipboard.png

使用T-SQL腳本修改PRIMARY KEY

若要使用 Transact-SQL 修改 PRIMARY KEY 約束,必須先刪除現有的 PRIMARY KEY 約束,而後再用新定義從新建立該約束。索引

語法:ip

--聲明使用數據庫
use 數據庫;
goit

--若是已存在主鍵,則先刪除再添加,若是不存在在則不刪除
if exists(select * from sysobjects where name=主鍵名)
alter table 表名 drop constraint 主鍵名;
goio

alter table 表名
add constraint 主鍵名
primary key
[nonclustered | clustered] ----在「表設計器」下的網格中,選擇「建立爲羣集索引」,再從下拉列表中選擇「是」建立羣集索引,或選擇「否」建立非羣集索引。 對於每一個表,只容許存在一個彙集索引。 若是此表中已經存在彙集索引,則您必須首先對原始索引清除此設置。
(列名 [asc | desc],列名 [asc | desc])
--statistics_norecompute=on:過期的統計信息不會自動從新計算。
--statistics_norecompute=off:啓用自動統計信息更新。
--ignore_dup_key=on:打開,將重複鍵值插入惟一索引時會出現警告消息。只有違反惟一性約束的行纔會失敗。
--ignore_dup_key=off:關閉,將重複鍵值插入惟一索引時會出現錯誤消息。回滾整個INSERT操做。
--allow_row_locks=on:訪問索引時容許行鎖。數據庫引擎肯定什麼時候使用行鎖。
--allow_row_locks=off:不使用行鎖。
--allow_page_locks=on:訪問索引時容許頁鎖。數據庫引擎肯定什麼時候使用頁鎖。
-- allow_page_locks=off:不使用頁鎖。
with(statistics_norecompute=off,ignore_dup_key=off,allow_row_locks=on,allow_page_locks=on) on [primary]
go

--添加主鍵描述
execute sp_addextendedproperty N'MS_Description', N'主鍵描述', N'SCHEMA', N'dbo', N'TABLE', N'表名', N'CONSTRAINT', N'主鍵名';
go

示例:

--聲明使用數據庫
use testss;
go

--若是已存在主鍵,則先刪除再添加,若是不存在在則不刪除
if exists(select * from sysobjects where name='PK__test1__3213E83F466EE881')
alter table test1 drop constraint PK__test1__3213E83F466EE881;
go

alter table test1
add constraint PK__test1__3213E83F466EE881
primary key
nonclustered ----在「表設計器」下的網格中,選擇「建立爲羣集索引」,再從下拉列表中選擇「是」建立羣集索引,或選擇「否」建立非羣集索引。 對於每一個表,只容許存在一個彙集索引。 若是此表中已經存在彙集索引,則您必須首先對原始索引清除此設置。
(id asc)
--statistics_norecompute=on:過期的統計信息不會自動從新計算。
--statistics_norecompute=off:啓用自動統計信息更新。
--ignore_dup_key=on:打開,將重複鍵值插入惟一索引時會出現警告消息。只有違反惟一性約束的行纔會失敗。
--ignore_dup_key=off:關閉,將重複鍵值插入惟一索引時會出現錯誤消息。回滾整個INSERT操做。
--allow_row_locks=on:訪問索引時容許行鎖。數據庫引擎肯定什麼時候使用行鎖。
--allow_row_locks=off:不使用行鎖。
--allow_page_locks=on:訪問索引時容許頁鎖。數據庫引擎肯定什麼時候使用頁鎖。
-- allow_page_locks=off:不使用頁鎖。
with(statistics_norecompute=off,ignore_dup_key=off,allow_row_locks=on,allow_page_locks=on) on [primary]
go

--添加主鍵描述
execute sp_addextendedproperty N'MS_Description', N'修改惟一主鍵', N'SCHEMA', N'dbo', N'TABLE', N'test1', N'CONSTRAINT', N'PK__test1__3213E83F466EE881';
go

clipboard.png

修改PRIMARY KEY主鍵優缺點

優勢:

一、主鍵能夠是任意數據類型。

二、整型主鍵簡單、效率高。

三、使用GUID做爲主鍵安全,保證惟一性。

四、使用GUID做爲主鍵不會產生自增字段那樣數據合併時的問題。

缺點:

一、整型主鍵有數據條數的限制。

二、整型主鍵在數據庫進行數據合併時會比較麻煩。

三、整型以外的數據類型毫無規律,要在上面創建索引很耗時,因此效率要比使用自增字段低。

四、整型以外的主鍵佔用大量存儲空間。