我遇到数据库中重复条目的问题,由于问题的性质,解决该问题的最简单方法是删除当前的重复行并防止添加更多重复项。
这是表结构:
| a | b | c |
user url1 token1
photo url1 token2
action action1 token3
user url1 token4
photo url1 token5
action action2 token6
我想仅当 2 列重复时才防止重复条目,在本例中为 a 和 b 。
所以这里我们有用户 | url1 和照片 | url1 重复两次。
当两列同时与另一行匹配时,我想防止添加任何进一步的重复项,但到目前为止我发现的查询将单独考虑每一列,并防止向其中任何列添加任何进一步的重复项。
我可以通过使用唯一索引的 mysql 查询来实现这一点吗?
我尝试使用以下代码:
Using ALTER TABLE `targets` ADD UNIQUE (
`a` ,
`b`
);
最佳答案
您的问题:“我可以通过使用唯一索引的 mysql 查询来实现此目的吗?”
答案是 100% 是。
创建索引有两种方式:
1. CREATE UNIQUE INDEX index_name
ON table_name (column1, column2, ...);
2. ALTER TABLE table_name
ADD UNIQUE index_name (column1, column2, ...);
但是,只有当您的表不存在重复数据时,这才有效。否则您将收到如下错误消息:
Query: CREATE UNIQUE INDEX index_name ON targets (a, b)
Error Code: 1062
Duplicate entry 'photo-url1' for key 'index_name'
因此,您需要:
- 创建一个与您的
targets
表类似的新空表。 - 创建唯一索引。
插入忽略
旧表中的数据。- 将
targets
重命名为targets_old
,将targets_new
重命名为targets
。
示例:
CREATE TABLE targets_new LIKE targets;
CREATE UNIQUE INDEX index_name
ON targets_new (a, b);
INSERT IGNORE INTO targets_new SELECT * FROM targets;
RENAME TABLE targets TO targets_old;
RENAME TABLE targets_new TO targets;
关于Mysql - 使用唯一索引防止组合列的重复条目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58092321/