我有一个拥有超过100,000个用户记录且没有主键的数据库。你能解释一下我将如何完成以下工作: 1.根据Firstname MiddleName LastName自动生成主键。 2.请注意,某些记录是冗余的,即相同的用户,并且我希望相同的用户具有相同的主键,例如Mary Jane Joe在行中出现20次我希望她在所有外观中具有相同的主键。 提前致谢
答案 0 :(得分:0)
通过添加带有自动增量的非null int字段来使用真正唯一的主键。这将自动为每条记录提供唯一的主键。如果您仍想将上述字段用作唯一字段,我会在字段之间添加复合唯一键。
这样做的一个主要好处是整数字段的查询速度比varchars快得多。话虽这么说,你的表只有100,000条记录,所以此时它可以忽略不计。
如果您仍想使用您定义的密钥,那么您可以使用相同的流程选择一些选项。
答案 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;