用MySql中的自然键改造表中的代理键?

用MySql中的自然键改造表中的代理键?,mysql,primary-key,surrogate-key,natural-key,Mysql,Primary Key,Surrogate Key,Natural Key,假设一个表使用一个自然键,并且有许多现有行。使用MySql改造代理键列并用唯一值填充它的最简单方法是什么 即变换 table employees ( social_security_no varchar(20), ... constraint emp_pk primary key (social_security_no) ); 到 并用有效的id:s填充新的id列 谢谢/Erik简单: ALTER TABLE employees DROP PRIMARY KEY; AL

假设一个表使用一个自然键,并且有许多现有行。使用MySql改造代理键列并用唯一值填充它的最简单方法是什么

即变换

table employees
(
    social_security_no varchar(20),
    ...
    constraint emp_pk primary key (social_security_no)
);

并用有效的id:s填充新的id列

谢谢/Erik

简单:

ALTER TABLE employees DROP PRIMARY KEY;
ALTER TABLE employees ADD (id INT AUTO_INCREMENT PRIMARY KEY);
或者,您(可能)希望执行以下操作:

CREATE INDEX employees_ssn ON employees (social_security_no);
对于任何参考表:

ALTER TABLE blah ADD (employees_fk INT);
UPDATE blah b SET employees_fk = (SELECT id FROM employees WHERE social_security_no = b.ssn);
ALTER TABLE blah DROP (ssn);
ALTER TABLE blah ADD (employees_fk INT);
UPDATE blah b SET employees_fk = (SELECT id FROM employees WHERE social_security_no = b.ssn);
ALTER TABLE blah DROP (ssn);