1

自然キーを使用し、既存の行が多数あるテーブルを想定します。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 列に有効な id:s を入力します。

ありがとう/エリック

4

1 に答える 1

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);
于 2009-01-17T21:56:51.370 に答える