Sql 独特的哲学在我的生活中

Sql 独特的哲学在我的生活中,sql,sql-server,sql-server-2005,sql-server-2008,Sql,Sql Server,Sql Server 2005,Sql Server 2008,我有一个三列的表,其中没有一列是唯一的。因此,我在表中添加了一个Id列作为uniqueidentifier,并将其设为主。只有一个问题:如果两行在这些列中具有相同的值将被添加到表中,那么第二行会发生什么情况?是否会增加?在我的场景中如何避免这种情况?如果您的三个非ID列没有唯一的约束,并且不是主键的一部分,则可以添加具有完全相同值的多行 如果要避免重复行,最好对三列中的至少一列或多列应用唯一约束。如果你因为某种原因不能做到这一点,你应该发布你的模式,以及你认为问题在于如何获得更多的帮助 如果不能

我有一个三列的表,其中没有一列是唯一的。因此,我在表中添加了一个Id列作为uniqueidentifier,并将其设为主。只有一个问题:如果两行在这些列中具有相同的值将被添加到表中,那么第二行会发生什么情况?是否会增加?在我的场景中如何避免这种情况?

如果您的三个非ID列没有唯一的约束,并且不是主键的一部分,则可以添加具有完全相同值的多行

如果要避免重复行,最好对三列中的至少一列或多列应用唯一约束。如果你因为某种原因不能做到这一点,你应该发布你的模式,以及你认为问题在于如何获得更多的帮助


如果不能使用唯一约束,避免重复的一种方法是:在插入记录时,首先检查该记录是否已存在,如果已存在,则决定如何处理该记录。

将添加第二个记录。您可以通过创建唯一约束来避免这种情况。

如果您的目标是在三列之间强制执行唯一性,那么您基本上可以选择两种结构:

Create Table tbl_1
(
ColA int
,ColB varchar(32)
,ColC varchar(256)
,Primary Key (ColA, ColB, ColC)
)
GO

这两种技术都有优点,哪种更好取决于数据的性质以及您与数据的交互。但是,在这两种结构中,任何给定列中的值都可以重复,但对于每一行,三者的组合必须是唯一的


另一方面,如果您只是试图对可能唯一或可能不唯一的数据设置PK,则可以使用结构2,但不使用唯一约束。在这种情况下,每一行都由ID列唯一标识,但其他列的值可以自由重复。

@aaaaaaaaa这三个列一起如何,是唯一的吗?
Create Table tbl_2
(
ID int identity(1,1) Primary Key
,ColA int
,ColB varchar(32)
,ColC varchar(256)
,Unique (ColA, ColB, ColC)
)
GO