gpt4 book ai didi

php - 在插入期间最小化 autoinc id 间隙,如何?

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

我有一个慢慢收集信息的工作表,比方说表 A1、A2、A3。

我时常需要将表 A1、A2、A3 中的新信息复制到表 B1、B2、B3 中。这些表相当大(约 20000 行)。

A1、A2、A3 表使用 GUID,而 B1、B2、B3 表使用 AUTO_INCREMENT id。

由于大小的原因,插入以 300 个为一组。

如果其中一个插入失败,那么所有其他表也一定没有插入数据,所以我将所有查询放入一个事务中。

本文提到的解决方案似乎有效:http://mysql.rjweb.org/doc.php/datawarehouse

除了文章特别提到这不应该在事务内完成(据我所知我不能这样做)

This INSERT..SELECT must not be done inside the transaction with the rest of the processing. Otherwise, you add to deadlock risks, leading to burned ids.

我也考虑过使用 INSERT IGNORE 和 innodb_autoinc_lock_mode=0 但我无法使用 PDO 设置 innodb_autoinc_lock_mode,它只是给出错误:

SQLSTATE[HY000]: General error: 1238 Variable 'innodb_autoinc_lock_mode' is a read only variable'

弄清楚如何使用 PDO 设置 innodb_autoinc_lock_mode 可以解决这个问题,但我做不到。

只是执行 INSERT IGNORE INTO B1 SELECT FROM A1 并忽略间隙也听起来很诱人,但是表太大并且 autoinc id 很快达到大小限制

我已经为此苦苦挣扎了几个星期,我不介意差距,只要它们不会增加得这么快。有没有人对解决此问题的最佳方法有任何建议?

最佳答案

but the tables are too large and the autoinc id quickly reaches the size limit

不是。

如果每秒插入一条新记录,则将在 70 年内达到限制。甚至可以延长此限制,但怀疑是否需要这样做。

所以,不要介意间隙并以通常的方式插入。

而且 - 更重要的是 - 永远不要为自动增量而烦恼。它不是必须保持有序的东西。

关于php - 在插入期间最小化 autoinc id 间隙,如何?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19619114/

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