唯一约束阻止您在其中插入新记录时的 4 种解决方法 SQL Server

立即分享:

如果您因为唯一性约束而无法向表中插入新记录,请不要错过阅读本文。 它将帮助您解决这个问题。

在本文中,我们将介绍 4 种方法来解决由于违反表的唯一约束而无法插入新记录的问题 SQL Server.

真实案例:

现在让我们看一个真实的案例。 我们有一个名为“Product”的数据库,还有一个名为“DataNumen数据库中的产品”。 表中有“ProductId”和“ProductName”两个字段,数据类型分别为“int”和“varchar”。 而“ProductId”是一个具有唯一约束的主键。

目前表中有一些记录,如下:表中记录“DataNumen产品”

图1 表中的记录“DataNumen产品”

假设数据库有两个 DBA,即 Jim 和 Tom。 一天,Jim删除了表中的第一条记录,如下:

DELETE FROM DataNumenProduct
WHERE ProductId=1;

第二天,Tom向表中插入了一条新记录,该记录与删除的记录具有相同的主键,如下所示:

INSERT INTO DataNumenProduct
VALUES(1,'DataNumen OutLook Repair');

所以我们的表有如下记录,如下:

表中的更新记录“DataNumen产品”

图 2 表中的更新记录“DataNumen产品”

现在如果 Jim 想将删除的记录恢复到表中,就会违反主键“ProductId”的唯一约束。 在这种情况下,我们可以使用以下解决方法之一来解决问题。

解决方法 1:修改新记录的主键以防止冲突

我们可以将要插入的记录的主键修改为一个新值,该值与表中所有现有记录的主键不同。 以上例为例,对于要插入的记录,我们可以将主键值从1修改为5,然后将新生成的记录恢复回表,如下:

INSERT INTO DataNumenProduct VALUES(5, 'DataNumen Access Repair');

下面是表中的最终记录:表中的最终记录“DataNumen 产品”

图3 表中最终记录“DataNumen 产品”

解决方法 2:修改现有记录的主键以防止冲突

  1. 首先,我们需要更新现有记录的主键值,这可能会导致冲突,如下所示:
UPDATE DataNumenProduct
SET ProductId = 6
WHERE ProductId = 1;

以下是表中的更新记录:

表中的更新记录“DataNumen 产品”

图 4 表中的更新记录“DataNumen 产品”

  1. 然后我们可以将删除的记录恢复回表中,如下:
INSERT INTO DataNumenProduct
VALUES(1, 'DataNumen Access Repair ');

现在让我们看看最终版本,如下所示:

表中的最终记录“DataNumen 产品”

图 5 最终记录表“DataNumen 产品”

解决方法 3:禁用唯一约束速度rar简单地通过 SQL

  1. 为了解决这个问题,我们可以删除表tempo中的主键约束“pk”rar顺便说一句,如下:
ALTER TABLE DataNumenProduct
DROP CONSTRAINT pk;
  1. 然后我们可以将删除的记录添加回表中,如下:
INSERT INTO DataNumenProduct
VALUES(1, 'DataNumen Access Repair');

现在让我们看看表中的记录:

表中的更新记录“DataNumen 产品”

图 6 表中的更新记录“DataNumen 产品”

  1. 那么由于两条记录有相同的主键值,我们需要修改其中一条以防止冲突,如下:
UPDATE DataNumenProduct SET ProductId = 5
WHERE ProductName = 'DataNumen Outlook Repair';
  1. 最后,我们将主键约束“pk”添加回表中,如下所示:
ALTER TABLE DataNumenProduct
ADD CONSTRAINT pk PRIMARY KEY(ProductId);

现在表中有一些记录,如下:

表中的更新内容“DataNumen 产品”

图 7 表中的更新内容“DataNumen 产品”

解决方法 4:禁用唯一约束速度rar通过 SQL Server 管理工作室:

  1. 首先,我们通过GUI删除表中的主键约束“pk”,如下:

通过 GUI 删除主键约束“pk”

图 8 通过 GUI 删除主键约束“pk”

  1. 然后我们将实际删除的记录插入到表中,如下所示。
INSERT INTO DataNumenProduct
VALUES(1, 'DataNumen Access Repair');

现在表中有一些记录,如下:

表中的更新内容“DataNumen 产品”

图 9 表中的更新内容“DataNumen 产品”

  1. 然后我们修改表中已有记录的主键值,如下:
UPDATE DataNumenProduct
SET ProductId = 5
WHERE ProductName = 'DataNumen Outlook Repair';
  1. 最后,我们通过 GUI 将主键约束“pk”添加回表中,如下所示:通过 GUI 添加回主键约束“pk”

图 8 通过 GUI 添加回主键约束“pk”

解决 SQL Server 数据库损坏

除了 Unique 约束, SQL Server 腐败 也是一个很常见的问题,很烦DBA。 通常我们可以使用 SQL Server 内置命令来解决损坏。 但是,如果它们不起作用,那么我们可以求助于某些第三方 SQL Server 数据恢复工具。

作者简介:

Jim Hu 是一位数据恢复专家 DataNumen, Inc.,它是数据恢复技术领域的世界领先者,包括 访问修复 以及 dbf 修复软件产品。 欲了解更多信息,请访问 datanumen.com

立即分享:

评论被关闭。