使用100,000个冗余记录向表中添加唯一主键

时间:2017-01-22 21:00:25

标签: mysql database-design foreign-key-relationship

我有一个拥有超过100,000个用户记录且没有主键的数据库。你能解释一下我将如何完成以下工作: 1.根据Firstname MiddleName LastName自动生成主键。 2.请注意,某些记录是冗余的,即相同的用户,并且我希望相同的用户具有相同的主键,例如Mary Jane Joe在行中出现20次我希望她在所有外观中具有相同的主键。 提前致谢

2 个答案:

答案 0 :(得分:0)

最佳选择

通过添加带有自动增量的非null int字段来使用真正唯一的主键。这将自动为每条记录提供唯一的主键。如果您仍想将上述字段用作唯一字段,我会在字段之间添加复合唯一键。

这样做的一个主要好处是整数字段的查询速度比varchars快得多。话虽这么说,你的表只有100,000条记录,所以此时它可以忽略不计。

替代

如果您仍想使用您定义的密钥,那么您可以使用相同的流程选择一些选项。

  1. 向您的表中添加常规的可空varchar字段,而不是主键(like this
  2. 查找重复项并删除它们
  3. 遍历每条记录并根据您描述的值创建主键,并使用密钥更新步骤1中定义的当前记录字段。
  4. 更改表格,现在添加主键(like this
  5. 我必须提醒你,听起来你对主键的想法并不是真正独特的,这会破坏主键的目的。

答案 1 :(得分:0)

使用auto-inc(如果需要)和名称上的唯一性约束构建新表:

CREATE TABLE new (
    id INT UNSIGNED AUTO_INCREMENT,
    PRIMARY KEY(id),
    UNIQUE(Firstname, MiddleName, LastName)
);

将所有非重复行复制到该表中。 (这假定" dup"只涉及3列,而不仅仅是名称。)

INSERT IGNORE INTO new
                   (Firstname MiddleName LastName, ...)
    SELECT DISTINCT Firstname MiddleName LastName, ...
        FROM real;

切换表格(如果需要):

RENAME TABLE real TO old, new TO real;
DROP TABLE old;