勉強したことのメモ

webプログラマ見習いが勉強したことのメモ。

InnoDBのオートインクリメント

      2016/07/01

MySQLのInnoDBでIDというカラムにオートインクリメント設定していたが、「1.2.3.4.5」と順番にならずに「1.5.9.10.13」と飛び飛びになっている現象があり、それが原因で障害が発生した。

 

飛び飛びになっていた理由

INSERT ~ ON DUPLICATE KEY UPDATEを使った場合、次回のインサート時はIDが飛んでしまう模様。以下実験を行った。

 

実験

まず以下のようなテーブルを作った。テーブル名はtest_table。IDと名前と何らかの得点的なテーブル。

 

データを2行入れてみる。

 

この時点でのデータは以下の通り。

 

INSERT ~ ON DUPLICATE KEY UPDATEで更新をかけてみる。

 

この時点でのデータは以下の通り。

 

先ほどは更新だったけど、インサートになるようにINSERT ~ ON DUPLICATE KEY UPDATEを使う。

 

すると以下の通りIDが飛んでしまう。

尚、MyISAMで同様のテストをしたところちゃんと連番になった。

 

注意したい点

データが飛ぶのは問題なかったんだけど、頻繁に更新するプログラムだった為、IDがint型の上限を超えてしまうということが発生してしまった。しかも常時更新タイプのものだったのでその時点で障害が発生。

InnoDBでINSERT ~ ON DUPLICATE KEY UPDATEを使うときの挙動は覚えておく。

 - MySQL

  関連記事

images
MySQL/Apacheの再起動

忘れないようにメモ。 ■MySQL service mysqld restart ...

msyql-image
phpmyadminからプロセスの停止

重たいSQL文を叩いた際、どうにも処理できず メモリ使用率が100%から下がらな ...

msyql-image
MySQLでユーザー作成時にエラーが発生

SSHからrootアカウントでMySQLにログインし、ユーザーを作成しようとする ...

msyql-image
MySQLでデータがあれば更新、無ければ挿入

DBにデータがあれば更新、無ければ挿入(新規作成)を 行いたい際に使えるものがあ ...

images
WordPressで「データベース接続確立のエラー」

WordPressで設定ファイル(wp-config.php)は触っていないのに ...

msyql-image
sshでMySQLの操作

今までMySQLを操作するときはphpmyadminから 行っていたけど、php ...

msyql-image
MySQLで加算しつつNULL値は0にする

いくつかのコードに対して投票を行い、 その合計値をスコアとして出したい。 ただ、 ...

msyql-image
MySQLの値について

既存プログラムの解析をしてて知ったこと。 MySQLの構造で「int(11)」と ...

msyql-image
MySQLで検索した件数の取得

ページングとかで必要になる総件数について、 いつもググってしまっていたのでメモ。 ...

msyql-image
MySQLでREGEXPについて

SQL文にREGEXPというのを見てこれ何? となったのでメモ。 ■参考サイト ...