🐈

[MySQL]AUTO_INCREMENTのidが戻る

に公開3

Discussion

hmatsu47hmatsu47

記事の件について(余計なお世話みたいなコメントで恐縮ですが)おまけの情報です。
本家 MySQL の代わりに Amazon Aurora や RDS を使うケースも多いと思いますが、MySQL 8.0 互換の Aurora MySQL v3 と RDS for MySQL 8.0 ではAUTO_INCREMENTの挙動に差異があるので注意が必要です。

https://docs.aws.amazon.com/ja_jp/AmazonRDS/latest/AuroraUserGuide/Aurora.AuroraMySQL.Compare-v2-v3.html#AuroraMySQL.mysql80-autoincrement

Aurora MySQL バージョン 3 では、各 DB インスタンスを再起動する際、Aurora は 各テーブルの AUTO_INCREMENT 値を保持します。Aurora MySQL バージョン 2 では、再起動後に AUTO_INCREMENT 値が保持されませんでした。

スナップショットからの復元や、ポイントインタイムリカバリの実行、およびクラスターのクローン作成によって新しいクラスターを設定した場合、AUTO_INCREMENT 値は保持されません。この場合の AUTO_INCREMENT 値は、スナップショットが作成された時点のテーブル内の最大列値に基づいた値に初期化されます。この動作は、RDS for MySQL 8.0 では異なり、AUTO_INCREMENT 値はこれらのオペレーション中に保持されます。

hmatsu47hmatsu47

ちょっと表現が紛らわしかったかもしれません。
RDS for MySQL 8.0 では本家 MySQL 8.0 で改善されたとおりの挙動(AUTO_INCREMENT値が保持される)になりますが、Aurora MySQL v3 ではスナップショットからの復元や PITR、クローン作成時に旧バージョンと同じ挙動(AUTO_INCREMENT値が巻き戻る)になります。