2011-07-20 23 views
9

我有一个MySQL列中有30列和数千个条目。
有没有一种方法可以使每一行都是唯一的,这意味着如果一行已经存在,我不应该再次输入该行。有没有办法使整个MySQL行独一无二

我不能在这里使用主键或唯一键,因为每个列可能会重复。
我希望该行是唯一的。 例如: - 有与

columns->name,age,height,weight. 

表在本专栏中,我不能做任何一个或两列独一无二的,但我不应该有两个条目与所有相同的数据。

+0

请记住[错误1071](http://stackoverflow.com/questions/1814532/1071-specified-key-was-too-long-max-key-length-is-767-bytes/16820166#16820166 )结合这么多列可能会产生问题。 – roundar

回答

10

您需要一个复合主键。

复合主键告诉MySQL你希望你的主键是字段的组合。

此处了解详情: Why use multiple columns as primary keys (composite primary key)

+0

OP说她不能使用主键用于此目的 –

+1

@Raj更多:从问题看来,OP认为PK或英国人一次只能申请一个专栏,所以我认为这是一个有效的答案。 –

+0

你是对的,@安德斯亚伯。这就是我投票的原因。 –

2

你可以做一个唯一索引上多列。只需将所有列放在索引中。如果列很大,您可能会遇到索引最大长度的问题,但请先尝试一下并查看。

17

您可以包括在你的餐桌

ALTER TABLE buyers ADD UNIQUE idx_row_unique(first_name,last_name,...); 

这样你就可以保持为加入目的的唯一AUTO INCREMENT主键中的所有列的唯一索引,同时还确保所有的数据在你的表是独一无二的。

+0

问题在于索引具有最大长度,非常长的索引效率低下。 –

4

您可以在所有列上创建UNIQUE key,而不是在每列上创建单独的唯一键。这意味着这些值的组合将是唯一的 - 正是您所需要的。但请注意,如果任何列允许空值,如果该列包含null值,则它将被计数为唯一,即使另一行包含相同的值,其中null为相同的值。

相关问题