Mysql 删除没有ID的重复值

Mysql 删除没有ID的重复值,mysql,Mysql,我有一张这样的桌子: uuid | username | first_seen | last_seen | score 在此之前,表使用升序的“player_id”列的主键。我删除了这个玩家id,因为我不再需要它了。我想让“uuid”成为主键,但是有很多重复项。我想从表中删除所有这些重复项,但保留第一行(根据行号,保留第一行) 我该怎么做?我到处都搜索过,但它们都显示了如果您有一个行ID列,该如何执行…我极力主张使用自动递增的整数主键。所以,我鼓励你回去。由于以下几个原因,这些方法非常有

我有一张这样的桌子:

   uuid | username | first_seen | last_seen | score
在此之前,表使用升序的“player_id”列的主键。我删除了这个玩家id,因为我不再需要它了。我想让“uuid”成为主键,但是有很多重复项。我想从表中删除所有这些重复项,但保留第一行(根据行号,保留第一行)


我该怎么做?我到处都搜索过,但它们都显示了如果您有一个行ID列,该如何执行…

我极力主张使用自动递增的整数主键。所以,我鼓励你回去。由于以下几个原因,这些方法非常有用:

  • 它们告诉您行的插入顺序
  • 它们对于主键更有效
  • 因为主键在MySQL中是集群的,所以它们总是在最后
但是,你不必遵循这个建议。我的建议是将数据插入到新表中,然后重新加载到所需的表中:

create temporary table tt as 
    select t.*
    from tt
    group by tt.uuid;

truncate table t;

alter table t add constraint pk_uuid primary key (uuid);

insert into t
    select * from tt;

注意:我使用的是MySQL的一个(mis)功能,它允许您通过
一列对
进行分组,同时通过
分组对不在
中的列进行拉取。我不喜欢此扩展,但您没有指定如何选择所需的特定行。这将为匹配行中的其他列提供值。还有其他方法可以让每个
uuid

获得一行。谢谢,我现在就试试!此外,我删除了该ID,因为我想防止“uuid”的任何重复项。。。我是否应该将“uuid”设为唯一键,但仍保留主键的行号?哦,既然我已经删除了它,数据库包含7000到23000行(忘记了,但在这个范围内),那么是否有一个根据行号自动插入行ID的查询?您可以有一个自动递增的主键,并且仍然声明
uuid
唯一的
。您的表很小,但您不会分配值,数据库会为自动递增的列分配值。