我有一个数据库,它有超过100000条用户记录,而且没有主键。你能向我解释一下我将如何完成以下任务吗1.基于Firstname MiddleName LastName自动生成主键。2.请注意,有些记录是多余的,即相同的用户和我希望相同的用户拥有相同的主键,例如Mary Jane Joe在行中出现了20次,我希望她在所有出现中都拥有相同的主密钥。提前感谢
最佳选项
通过添加一个具有自动增量的非null int字段来使用真正唯一的主键。这将自动为每条记录提供一个唯一的主键。如果您仍然想使用上面描述的字段作为唯一字段,我会在字段之间添加一个复合唯一键。
这样做的主要好处之一是,整数字段的查询速度比varchars快得多。话虽如此,您的表只有100000条记录,因此此时可以忽略不计。
备用
如果你仍然想使用你定义的键,那么你有几个选项,都有相同的过程。
- 向表中添加一个正则的、可为null的varchar字段,而不是主键(如下所示)
- 查找重复项并将其删除
- 循环浏览每个记录,并根据您描述的值创建主键,并使用该键更新步骤1中定义的当前记录字段
- 更改表以添加主键(如下所示)
不过,我必须提醒您,听起来您对主键的想法并不是唯一的,这违背了主键的目的。
使用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;