当前位置: 首页 > 知识库问答 >
问题:

将主键添加到现有表

文英达
2023-03-14

我有一个名为person的现有表。在这个表中,我有5列:

  • persionId
  • 人名
  • PMid
  • 描述
  • Pamt

创建此表时,我将personidPname设置为主键。

我现在想在主键中再包含一列——PMID。我如何编写一个ALTER语句来做到这一点?(表中已经有1000条记录了)

共有3个答案

彭博厚
2023-03-14
-- create new primary key constraint
ALTER TABLE dbo.persion 
ADD CONSTRAINT PK_persionId PRIMARY KEY NONCLUSTERED (pmid, persionId);

是一个更好的解决方案,因为您可以控制主键的命名。

这比仅仅使用

ALTER TABLE Persion ADD PRIMARY KEY(persionId,Pname,PMID)

这会导致随机名称,在编写脚本或比较数据库时可能会导致问题

东郭凯捷
2023-03-14

我觉得这样应该行得通

-- drop current primary key constraint
ALTER TABLE dbo.persion 
DROP CONSTRAINT PK_persionId;
GO

-- add new auto incremented field
ALTER TABLE dbo.persion 
ADD pmid BIGINT IDENTITY;
GO

-- create new primary key constraint
ALTER TABLE dbo.persion 
ADD CONSTRAINT PK_persionId PRIMARY KEY NONCLUSTERED (pmid, persionId);
GO
朱起运
2023-03-14

删除约束并重新创建它

alter table Persion drop CONSTRAINT <constraint_name>

alter table Persion add primary key (persionId,Pname,PMID)

编辑:

您可以使用下面的查询找到约束名称:

select OBJECT_NAME(OBJECT_ID) AS NameofConstraint
FROM sys.objects
where OBJECT_NAME(parent_object_id)='Persion'
and type_desc LIKE '%CONSTRAINT'
 类似资料:
  • 问题内容: 我对mysql有一个奇怪的问题。 我正在尝试更改表的列,该列是主键,并且对它定义了auto_increment约束。这也是其他多个表的外键参考。我需要在父级和所有子级中都更改此列的长度。 这将删除父表上的自动增量。添加约束的最佳方法是什么? 以下似乎失败了。 有没有更好的方法来实现这一目标? 编辑:显示创建为(更改后): 变更之前 谢谢! 问题答案: 您无需在MODIFY语句中指定:

  • 如果我在 SQL Server 2008 中使用以下 SQL 命令来更新具有外键约束的表: 是表中我的FK列。我正在尝试引用我的表中的。我收到这个错误: 外键“UserID”引用引用表“员工”中的无效列“UserID”。

  • 问题内容: 我想向具有数据的现有表中添加一个新的自动增量主列。我怎么做? 我先添加了一个列,然后尝试添加一个序列,此后,我迷失了如何插入该列并将其作为主键。 问题答案: 假设您的表被调用t1,您的主键被称为idFirst,创建序列: 然后创建一个触发器,该触发器在插入时增加:

  • 我有一个现有的Solr设置,运行在一个独立的Solr实例上。我被要求为此设置添加弹性和高可用性。因此,我想将复制添加到我的设置中,我认为SolrCloud是一种方式? 我已经在SolrCloud wiki上浏览了演示。然而,我不确定如何将现有的Solr实例添加到ZooKeeper,然后再添加一些节点以供复制。这是否可以不重新膨胀? 维基上说 注意:如果不使用示例启动solr,请确保在创建集合之前将

  • 本文向大家介绍SQL 添加主键,包括了SQL 添加主键的使用技巧和注意事项,需要的朋友参考一下 示例 这会将一个主键添加到该字段上的表employees ID。在括号中包含多个列名以及ID将创建一个Composite Primary Key。当添加多个列时,列名称必须用逗号分隔。            

  • 问题内容: 我想向现有表添加复杂的唯一键。主要从4个字段包含(,,,)。但是表具有非唯一行。我知道我可以删除所有重复的日期,然后再添加复杂的密钥。 也许存在另一种无需搜索所有重复数据的解决方案。(例如添加唯一的忽略等)。 我搜索了UPD,如何删除重复的mysql行-我认为这是一个很好的解决方案。 仅使用MySQL查询删除重复项? 问题答案: 您可以按照yAnTar的建议进行 要么 您可以添加约束