如何在 MySQL 中添加多个列并删除重复项?

发布于 2024-10-09 14:02:08 字数 352 浏览 0 评论 0原文

如何制作这样的东西:

ALTER TABLE `people` ADD UNIQUE (`name`, `hair_color`)

这也会从表 people 中删除重复项

,因为我有数据:

 `name` | `hair_color`
--------|--------------
 'John' | 'brown'
 'Paul' | 'brown'
 'Paul' | 'brown'
 'Paul' | 'gray'

操作后我想在表中有唯一的键,并且只有 2 个保罗(一个是棕色的,一个是灰色的)头发)。

How to make something like this:

ALTER TABLE `people` ADD UNIQUE (`name`, `hair_color`)

which also will remove duplicates from table people

f.e. I have data:

 `name` | `hair_color`
--------|--------------
 'John' | 'brown'
 'Paul' | 'brown'
 'Paul' | 'brown'
 'Paul' | 'gray'

and after operation I want to have UNIQUE KEY in table and only 2 Pauls (one wtih brown and one with gray hair).

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

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

发布评论

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

评论(3

一梦等七年七年为一梦 2024-10-16 14:02:08

MySQL对此有一个很好的小技巧。您可以为几乎任何命令添加 IGNORE 前缀,以使其忽略错误并让它“以某种方式”工作:

ALTER IGNORE TABLE `people` ADD UNIQUE (`name`, `hair_color`)

MySQL has a nice little hack for this. You can prefix pretty much any command with IGNORE to make it ignore errors and let it work "some way":

ALTER IGNORE TABLE `people` ADD UNIQUE (`name`, `hair_color`)
风流物 2024-10-16 14:02:08

只需添加 IGNORE 关键字,它就会在此过程中消除重复项:

ALTER IGNORE TABLE `people` ADD UNIQUE (`name`, `hair_color`)

Just add the IGNORE keyword and it'll get rid of duplicates in the process:

ALTER IGNORE TABLE `people` ADD UNIQUE (`name`, `hair_color`)
千秋岁 2024-10-16 14:02:08

没有任何单一操作可以做到这一点。您需要先删除重复项,然后添加 UNIQUE 约束

执行此操作的一般方法(如果您的表不是太大):

CREATE TABLE people_new (name varchar(20), hair_color varchar(20))
SELECT DISTINCT name, hair_color
FROM people;

DROP TABLE people;

ALTER TABLE people_new RENAME TO people;

ALTER TABLE people ADD UNIQUE (name, hair_color);

There is no single operation to do that. You need to first delete the duplicates and then you can add the UNIQUE constraint

The general approach to do this (if your table is not too big):

CREATE TABLE people_new (name varchar(20), hair_color varchar(20))
SELECT DISTINCT name, hair_color
FROM people;

DROP TABLE people;

ALTER TABLE people_new RENAME TO people;

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