gpt4 book ai didi

mysql - 如何处理 mysql #1062 - 创建大表时重复输入错误

转载 作者:行者123 更新时间:2023-11-29 02:33:17 26 4
gpt4 key购买 nike

我正在处理一个包含大约 500 万条记录的表。我正在从 csv 文件加载记录。

有一个唯一的列,url

插入时,如果 url 已经在表中,我想在新的 url 值中进行更改,然后进行插入。

示例:

  • 尝试插入一条 url"book" 的记录。如果 "book" 已经存在,则新记录的 url 应该是 "book-1"(那么 "book-2 " 等等)

  • 结果:url"book-1","book-2"... 除了初始值 book

我发现有2 种方法可以做到这一点。

  1. 插入每条记录前:检查url值是否已经存在;如果是,则在新的 url 值中进行必要的更改并插入。恐怕这会导致性能不佳。

  2. 插入记录而不检查 url 值是否已经存在。如果 url 值已经存在,请处理“mysql #1062 - 重复输入错误”并在 url 值中进行必要的更改;重试插入。

这可能吗?如果是,怎么办?

最佳答案

如果这是一次性问题,我想推荐一个 ad-hoc MySQL 解决方案:

  1. 如果您的表不是 MyISAM,请转换为 MyISAM。
  2. 临时创建一个名为 auto_increment 的整数列url_suffix.
  3. 暂时删除 url 列上的唯一约束。
  4. 创建多列索引(urlurl_suffix)并确保没有其他索引使用url_suffix
  5. 插入所有行,允许重复的 URL。您会注意到 auto_increment url_suffix 列现在以 url 为关键字。因此,第一个特定的 url 将具有 url_suffix1 和下一个 2,依此类推。<
  6. 执行如下更新,然后删除您的临时 url_suffix 列并放回您的唯一约束。

更新所有行的查询:

UPDATE urls
SET url = if (url_suffix = 1, url, CONCAT(url, '-', url_suffix - 1))

事实上,您可以跳过第 6 步,保留 auto_increment 字段以便您将来可以轻松添加重复的 URL,并且只需像这样获取您的 URL:

SELECT (if (url_suffix = 1, url, CONCAT(url, '-', url_suffix - 1))) AS url
FROM urls

你的数据看起来像这样:

url     url_suffix
---------------------------
that 1
that 2
this 1
this 2
this 3
those 1

关于mysql - 如何处理 mysql #1062 - 创建大表时重复输入错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9361761/

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