【问题标题】:AWS Aurora MySQLAWS 极光 MySQL
【发布时间】:2021-05-13 16:33:39
【问题描述】:

我正在尝试迁移到 Aurora MySQL,但遇到自动增量问题。使用 Aurora MySQL:

create table test (id int NOT NULL AUTO_INCREMENT,Primary Key(id));
insert into test (id) values(0);
insert into test (id) values(0);
insert into test (id) values(0);
update test set id=100 where id=3;
select * from test;
+-----+
| id  |
+-----+
|   1 |
|   2 |
| 100 |
+-----+
insert into test (id) values(0);
select * from test;
+-----+
| id  |
+-----+
|   1 |
|   2 |
|   4 |
| 100 |
+-----+

With MySQL or MariaDb the last result is: 

+-----+
| id  |
+-----+
|   1 |
|   2 |
| 100 |
| 101 |
+-----+ 

请注意,Aurora MySQL “填补”了 MySQL 保持并使用最大值的空白。

我能否将 Aurora MySQL 配置为保持相同的自动增量行为?如果有,怎么做?

【问题讨论】:

  • Mariadb 版本是 5.5.65-MariaDB。 Aurora MySQL 是 5.7.mysql_aurora.2.07.2

标签: mysql amazon-web-services auto-increment amazon-aurora


【解决方案1】:

迁移表格后,您可以更改自动增量值。

语法有点复杂,因为无法直接使用带有ALTER TABLE ... AUTO_INCREMENT 的查询或变量,但这是您将继续进行的方式:

SET @maxid = (SELECT MAX(id) FROM test);
set @sql = concat('ALTER TABLE test AUTO_INCREMENT = ', @maxid + 50);
prepare stmt from @sql;
execute stmt;
deallocate prepare stmt;

你可以用这个fiddle玩它

【讨论】:

  • 我认为 OP 并不关心增量的确切值,但它的行为就像 ID #3 的行仍然存在,可能 就像 ID #100 的行在那里。当它达到 100 时,可能存在密钥冲突。 (需要测试。)
  • @ceejayoz 我同意 ID 100 会发生冲突。很明显,aurora 在update test set id=100 where id=3; 时不会改变自动增量,如果他想这样做,他需要手动调整自动增量,如图所示,我认为没有另一条明确的路径
  • 是的,问题是对于完全相同的 sql 序列,系统之间生成的数字不同。对于我们的应用程序来说,这确实是一个非入门者,它可能与该区域的行为有依赖关系。应用程序有 1000 行 SQL。重写不实用。
  • @user44021 假设自动增量 ID 在基础设施之间保持一致并不是一个好主意;你可能会在多主集群上运行 prod,例如,由于 auto_increment_offset,ID 可能会在这里和那里跳过一些。不要假设。我确实很好奇 Aurora 在达到 #100 时是否会出现问题,但这将是一个 Aurora 错误。您所描述的是一个编码错误。
  • 不是编码错误。我们使用产品 A,然后尝试切换到产品 B,在给定完全相同的输入的情况下,该产品报告产生与 A 相同的结果。在这种情况下,它不是问题,这个问题出现在我们的单元测试中。我们做了1000个这样的。一项测试因此而失败。这是人为设计的,实际上并不是我们应用程序中的东西,所以无论如何我们都在推进 Aurora....
猜你喜欢
  • 1970-01-01
  • 2021-09-03
  • 2021-05-24
  • 2016-12-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-18
相关资源
最近更新 更多