Help us understand the problem. What is going on with this article?

MariaDBのAUTO_INCREMENTについて

More than 1 year has passed since last update.

はじめに

以下のページのざっくり訳メモです。

MariaDB Documentation - AUTO_INCREMENT

Description

  • 新規にレコードを追加するときにkeyの値を自動的に増やす仕組み
  • defaultは1
  • tableは1つだけAUTO_INCREMENTを設定したカラムを持つことができる
    • それはkeyである必要があるが、PRIMARY KEYやUNIQUE KEYである必要はない

Setting or changing the auto_increment value

  • tableにAUTO_INCREMENTを設定する方法は2つ
    • ALTER TABLE
    • insert_idというvalueにset

InnoDB/XtraDB

  • 10.2.3まではauto-increment数はメモリに保管されており、serverを再起動すると数はtable内のもっとも高い値に設定される
  • 10.2.4からはこの制約は解除され、AUTO_INCREMENTは永続的になる
  • AUTO_INCREMENT Handling in XtraDB/InnoDBも見るとよい
    • 今更ですけどAUTO_INCREMENTってあるPKの次に設定される値で、どんどん大きくなるんですね。ON/OFFではなく。

Setting explicit values

  • AUTO_INCREMENTの値は対象のkeyに存在してはいけない
  • 新しい値は現在の最大値より大きくないといけない。
  • もし現在の最大値より小さい値が挿入された場合はAUTO_INCREMENTは変化しない

例が分かりやすい。

Missing values

  • AUTO_INCREMENTは欠損することがある
  • 行が削除された場合やAUTO_INCREMENTが明示的に更新された場合、古い値は決して使われない
  • 結果的に、AUTO_INCREMENTは時系列的に(昇順に)並ぶが、整数列にはならない

Replication

  • galeraによるmalti-master replicationを安全に行うためにはAUTO_INCREMENTはauto_increment_incrementとauto_increment_offsetを使いクラスタ内でユニークな値を生み出す必要がある。

ここがキモ。OFFSETは開始位置で、INCREMENTが増分。multi-musterの場合は以下のように増えていかないといけない。

* maria1: 1 -> 4 -> 7 (INCREMENT=3, OFFSET=1)
* maria2: 2 -> 5 -> 8 (INCREMENT=3, OFFSET=2)
* maria3: 3 -> 8 -> 9 (INCREMENT=3, OFFSET=3)

CHECK constraints, DEFAULT values and virtual columns

  • MariaDB 10.2.6以降ではauto_incrementカラムは以下の環境下では許可されない
  • 10.2.4より低いバージョンでは許可されるが、うまく動かない可能性がある。詳細はMDEV-11117参照

ちょっとここはよくわかんなかったな。

おわりに

AUTO_INCREMENTの考え方がわかった。次はgaleraによるmulti-master replicationを行うときの動きについて、wsrep_auto_increment_controlを見ていく。

chaspy
Site Reliability Engineer at Quipper
https://chaspy.me
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした