当前位置: 首页 > 面试题库 >

将主键更改为复合键(主键已存在)

锺离鸿
2023-03-14
问题内容

我试图将我的SQL数据库中表的主键从现有键更改为复合键,其中不包括现有列。由于出现以下错误消息,因此以下代码无法正常工作:

删除主键:

PRIMARY附近的语法不正确。预期为COLUMN,CONSTRAINT,ID或QUOTED_ID

添加主键:

PRIMARY附近的语法不正确。 期望ID

T-SQL代码:

ALTER TABLE AgentIdentification 
DROP PRIMARY KEY Number, 
ADD PRIMARY KEY (AgentId, IdIndicator)

编辑

我可以通过使用以下两个查询语句来完成此操作

ALTER TABLE AgentIdentification 
DROP CONSTRAINT [PK_AgentId_Id]
GO

ALTER TABLE AgentIdentification
ADD CONSTRAINT pk_PersonID PRIMARY KEY (AgentId, IdIndicator)

我没有要求SQL“ DROP PRIMARY KEY”,而是需要将它告诉“ DROP CONSTRAINT”,而将这两个动作分成两个查询也有帮助。


问题答案:
    /* For SQL Server/Oracle/MS ACCESS */
    ALTER TABLE  AgentIdentification 
    DROP CONSTRAINT PK_Table1_Col1


    /* For MySql */
    ALTER TABLE  AgentIdentification 
    DROP PRIMARY KEY

要添加主键:

MySQL / SQL Server / Oracle / MS Access:

ALTER TABLE Table1
ADD CONSTRAINT pk_PersonID PRIMARY KEY (AgentId, IdIndicator)


 类似资料:
  • 问题内容: 我正在设计一个数据库,该数据库将用于存储来自许多不同来源的数据。我存储的实例由原始来源分配了唯一的ID。我存储的每个实例都应包含有关其来源的信息,以及与此来源相关联的ID。 作为示例,请考虑说明该问题的下表: 请注意,尽管每个来源的唯一,但有可能在不同来源中找到相同的来源。 我对关系数据库有一个不错的了解,但是与专家甚至是经验丰富的用户都相去甚远。我在此设计中面临的问题是应该用作主键。

  • 好的,所以我不确定这是否可能,但我需要更改一个表中的主键值,以匹配另一个表中的FK值。 我创建了一个表-POS_Transactions(FK REGISTER)并导入了它的值,然后创建了另一个表-Registers(pk Registers key)并导入了它的值。但是当我导入寄存器的值时,我遇到了一些问题,必须清除表并再次尝试多次(这就是为什么数字是从15到22的原因,它只是以这种方式自动更新

  • 问题内容: 兼职勉强的DBA在这里。我想将现有的主键索引从群集更改为非群集。语法在逃避我。 这就是现在的脚本编写方式。 我在在线文档中没有看到ALTER CONSTRAINT语句。 问题答案: 删除聚集索引,然后将主键重新创建为非聚集键:

  • 我在jpa/Hibernate中映射复合键时遇到了问题。父实体和子实体都具有复合主键。 在运行时保存它时会出现以下异常: 我认为这是虚假的,因为有getter和setter。如果在priceRequestLegModel上使用mappedby=“leg”,在allocationModel上使用@mapsid,也会出现同样的错误。有人能指出我在这里做错了什么吗?

  • 在这里,是主列键中的第三列。我想要做到这一点的唯一方法是将主复合键更改为。我找不到任何文档告诉我如何做到这一点。有可能吗? 或者,我是否错过了解决这个问题的“正确”方法/我是否曲解了这个问题?

  • 问题内容: 如何使用复合主键作为外键?看来我的尝试无效。 问题答案: 该行: 是错的。您不能那样使用,这只是父表中PK约束的名称。要将复合主键用作外键,您必须向子表中添加相同数量(组成PK)的相同数据类型的列,然后在定义中使用这些列的组合: