SQL主键重复值

时间:2016-04-16 23:04:33

标签: sql database duplicates primary-key

我有一个包含2个主键列的表:IDStudentID

ID列设置为isIdentity = Yes并自动增加。

我之前已多次测试过,但由于某种原因,这次,当我在StudentID上插入重复值时,它不会抛出错误,而是将其添加到数据库中。当我显示表格数据时,会显示2个相同的值。

这里有什么问题?

5 个答案:

答案 0 :(得分:5)

您在IDStudentID上有一个复合主键。这意味着您将ID和StudentID组合在一起必须是唯一的。由于ID是一个标识列,IDStudentID的组合始终是唯一的(因为ID本身已经是唯一的)。

您可以将主键更改为仅在ID。然后,您可以在StudentID上添加唯一索引。例如:

create unique index idx_studentID on yourTable(StudentID)

这将确保StudentID列实际上只包含唯一值。

您似乎可能实际上不需要ID列,但这比原始问题的讨论要广泛得多。

答案 1 :(得分:0)

你不能拥有2个“主键”。您可以拥有复合主键(意味着组合需要是唯一的,这就像您现在所听到的那样。或者,您可以拥有一个“主”键和一个“独特”约束,这听起来像你想要

答案 2 :(得分:0)

您不能拥有2个主键。如果需要,您可以拥有多个唯一键,这可以帮助您。确保返回创建表格并仔细检查哪个列是您的主键并从那里开始工作。

答案 3 :(得分:0)

不要混淆身份,主键和唯一键。

  1. 任何表都可以拥有您可以在表上设置的标识密钥。这里的种子可以说是1,然后将其递增1.因此增量订单会像1,2,3 ......等等。

  2. 主键,可以在表的特定列上定义。身份密钥可以用作主键。但是你可以在同一个表上拥有标识列和主键。主键是一个且仅用于表。因此,如果您将标识视为主键,则您将没有其他表列作为主键。

  3. 唯一键,与您的表格可以有多个列。

  4. 从表数据中提取行时,如果提供身份键,主键和唯一键的组合,则搜索将是最快的

答案 4 :(得分:0)

在我的第一次回复中,我提到可以通过软编码生成标识列,并且不会将其视为主键。以下是创建表时可以使用的语法。

1]如果希望将标识列设置为主键 --id int identity(1,1)主键 2]如果一个人不希望将标识列设置为主键并仍然希望 给我们身份栏,然后给我们一个字主键为标识栏。 --id int identity(1,1) 在这种情况下,可以在其他表列上创建主键。