3
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

MariaDBのAUTO_INCREMENTについて

Posted at

はじめに

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

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を見ていく。

3
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?