---
slug: "mysql-auto-increment-refresh-information-schema-caching"
title: "MySQL で、AUTO_INCREMENT の値を設定して取得する"
description: "MySQL で、テーブルの auto_increment を設定したり取得したりする時、\nMySQL8以降は、information_schema がキャッシュされるので、連続で AUTO_INCREMENT を取得すると、更新されない値が取得できることがある。\nその場合の対策方法"
url: "https://www.ytyng.com/blog/mysql-auto-increment-refresh-information-schema-caching"
publish_date: "2023-05-18T00:31:20Z"
created: "2023-05-18T00:31:20Z"
updated: "2026-02-27T11:47:58.367Z"
categories: []
keywords: ""
featured_image_url: "https://media.ytyng.com/resize/20250602/63a966f5a1fb4f698fc889c05370b31b.png.webp?width=768"
has_video: true
has_music: true
video_urls: ["https://media.ytyng.net/ytyng-blog/283/featured-video-1.mp4", "https://media.ytyng.net/ytyng-blog/283/featured-video-2.mp4", "https://media.ytyng.net/ytyng-blog/283/featured-video-3.mp4"]
music_urls: ["https://media.ytyng.net/ytyng-blog/283/featured-music-283-4.mp3", "https://media.ytyng.net/ytyng-blog/283/featured-music-283-5.mp3"]
lang: "ja"
---

# MySQL で、AUTO_INCREMENT の値を設定して取得する

MySQL で、テーブルの auto_increment を設定したり取得したりする時、
MySQL8以降は、information_schema がキャッシュされるので、連続で AUTO_INCREMENT を取得すると、更新されない値が取得できることがある。
その場合の対策方法

## 設定
```mysql
ALTER TABLE my_table_name AUTO_INCREMENT = 1
```

## 取得
```mysql
SELECT AUTO_INCREMENT
FROM information_schema.tables
WHERE TABLE_NAME = 'my_table_name'
```

ただし、キャッシュされている値が取得されることがある。
以下のどちらかの方法で対策できる。

### 対策A: セッション内で information_schema のキャッシュを無効化する
```mysql
SET information_schema_stats_expiry = 0
```

### 対策B: テーブルの information_schema のキャッシュを強制的に更新する

```mysql
ANALYZE TABLE my_table_name
```

# 参考ページ
- [[MySQL8.0] InnoDB でinformation_schema.TABLESのAUTO_INCREMENTが古いとき - Qiita](https://qiita.com/lofi/items/3a12f69081c73f81945a)
- [MySQL :: MySQL 8.0 リファレンスマニュアル :: 8.2.3 INFORMATION_SCHEMA クエリーの最適化](https://dev.mysql.com/doc/refman/8.0/ja/information-schema-optimization.html)
