2009-01-17 25 views
1

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

I.e.变换

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

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

,并填写有效身份证件新的id列:秒。

感谢/埃里克

回答

3

简单:

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);