ロックしてインクリメントして値取得してアンロック、とかやらなくてもいい方法
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 | +------------------+
できた。おわり。