我在MySQL中有一个包含30列和数千个条目的表 有没有办法让每一行都是唯一的,这意味着如果一行已经存在,我就不能再次进入该行了。
我不能在这里使用主键或唯一键,因为每个列都可能会重复 我希望这行是唯一的。 例如: - 有一个带
的表columns->name,age,height,weight.
在本专栏中,我不能将任何一列或两列唯一,但我不应该有两个具有相同数据的条目。
答案 0 :(得分:19)
您可以创建一个包含表格中所有列的唯一索引
ALTER TABLE buyers ADD UNIQUE idx_row_unique(first_name,last_name,...);
这样,您可以保留唯一的AUTO INCREMENT
主键以进行连接,同时仍然确保表中的所有数据都是唯一的。
答案 1 :(得分:11)
您需要一个复合主键。
复合主键告诉MySQL您希望主键是字段的组合。
更多信息: Why use multiple columns as primary keys (composite primary key)
答案 2 :(得分:4)
您可以在所有列上创建UNIQUE key
,而不是在每列上创建单独的唯一键。这意味着值的组合将是唯一的 - 正是您所需要的。但请注意,如果任何列允许空值,如果列包含null
值,则它将被计为唯一,即使另一行包含相同的值,null
表示相同的值。
答案 3 :(得分:2)
您可以在多个列上创建唯一索引。只需将所有列放在索引中即可。如果列很大,则可能会遇到索引最大长度的问题,但请先尝试并查看。
答案 4 :(得分:0)
您可以对数据进行哈希处理并将哈希值设置为PK,这将确保行是唯一的。