代码之家  ›  专栏  ›  技术社区  ›  Erik Öjebo

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

  •  1
  • Erik Öjebo  · 技术社区  · 16 年前

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

    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:s填充新的id列。

    谢谢/埃里克

    1 回复  |  直到 16 年前
        1
  •  3
  •   cletus    16 年前

    简单:

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