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

发布于 2024-07-11 07:22:21 字数 421 浏览 8 评论 0原文

假设一个表使用自然键并具有许多现有行。 使用 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 填充。

谢谢/埃里克

Assume a table that uses a natural key and has a number of existing rows. What would be the easiest way to retrofit a surrogate key column and populate it with unique values using MySql?

I.e. transform

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

to

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

and fill the new id column with valid id:s.

Thanks /Erik

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

鹊巢 2024-07-18 07:22:21

简单:

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

Simple:

ALTER TABLE employees DROP PRIMARY KEY;
ALTER TABLE employees ADD (id INT AUTO_INCREMENT PRIMARY KEY);

Optionally you'll (probably) want to do this:

CREATE INDEX employees_ssn ON employees (social_security_no);

and for any referencing tables:

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);
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文