揮発性のメモ2

http://d.hatena.ne.jp/iww/

カウンターテーブルを使って 変数ごとに採番する

ロックしてインクリメントして値取得してアンロック、とかやらなくてもいい方法

mysql> select * from TEST_SEQ;
+-----+-----+
| IND | VAL |
+-----+-----+
| A   |   3 |
| B   |  99 |
| C   |   4 |
+-----+-----+

たとえば、Bという変数をインクリメントしてから値取得する


MySQL :: MySQL 5.6 リファレンスマニュアル :: 12.14 情報関数

mysql> update TEST_SEQ set VAL=last_insert_id(VAL+1) where IND='B';
Query OK, 1 row affected (0.01 sec)

mysql> select * from TEST_SEQ;
+-----+-----+
| IND | VAL |
+-----+-----+
| A   |   3 |
| B   | 100 |
| C   |   4 |
+-----+-----+

インクリメントした値をこのテーブルのLAST_INSERT_IDにしまって更新。インチキっぽいけど公式推奨。

mysql> select LAST_INSERT_ID();
+------------------+
| last_insert_id() |
+------------------+
|              100 |
+------------------+

できた。おわり。


実践ハイパフォーマンスMySQL 第3版