gpt4 book ai didi

mysql - 向具有 7500 条非唯一记录的 MySQL 数据库添加 UNIQUE 约束

转载 作者:行者123 更新时间:2023-11-30 21:27:25 25 4
gpt4 key购买 nike

由于 find_or_initialize_by(key: ...) 中的竞争条件问题,我有大约 7500 条不唯一的记录。请建议删除重复项并向表中的 key 添加 UNIQUE 约束的最佳方法。还有什么我应该想到的吗?

  create_table "posts", force: :cascade do |t|
t.bigint "key", null: false
t.bigint "parent_key"
t.bigint "category_id", null: false
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
t.index ["key"], name: "index_posts_on_key"
t.index ["parent_key"], name: "index_posts_on_parent_key"
t.index ["category_id"], name: "index_posts_on_category_id"
end

最佳答案

要删除重复记录,可以使用DELETE ... FROM ... JOIN 语法:

DELETE p1 
FROM posts p1
INNER JOIN posts p2
WHERE p1.key = p2.key AND p1.created_at > p2.created_at;

这将删除 key 上的重复项,同时保留具有较早 created_at 的记录。

然后你可以添加UNIQUE约束:

ALTER TABLE posts ADD CONSTRAINT posts_key_unique UNIQUE(key);

或者更好的是,将 key 列设为表的主键(因为该表似乎还没有主键):

ALTER TABLE posts ADD PRIMARY KEY(key);

关于mysql - 向具有 7500 条非唯一记录的 MySQL 数据库添加 UNIQUE 约束,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58209325/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com