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做为主键不会产生自增字段那样数据合并时的问题。

缺点:

一、整型主键有数据条数的限制。

二、整型主键在数据库进行数据合并时会比较麻烦。

三、整型以外的数据类型毫无规律,要在上面创建索引很耗时,因此效率要比使用自增字段低。

四、整型以外的主键占用大量存储空间。