MariaDB10.3系で導入されたsequence(nextvalの方)において、

ほかテーブルのdefault値として設定できるようです。

確認したバージョンは、10.3.8です。


最初にsequenceを作ります。

MariaDB [test]> create sequence s_user increment by 0;

このとき、galeraなど使う際、問題ないように「increment by 0」をつけておきます。

ちなみに、このときのsequence関連のパラメータは以下の通りなので、

「increment by 0」をつけても、1ずつインクリメントされます。

MariaDB [test]> show variables like 'auto_increment%';
+--------------------------+-------+
| Variable_name            | Value |
+--------------------------+-------+
| auto_increment_increment | 1     |
| auto_increment_offset    | 1     |
+--------------------------+-------

次に以下のようなテーブルを作成します。

MariaDB [test]> create table t_user (
  user_id int not null,
  name varchar(32) not null,
  seq_no bigint not null unique default nextval(s_user),
  primary key (user_id)
);

上記テーブルにおいて、seq_noカラムのdefault値にsequenceの結果を設定したので、以下のようなinsertにて、nextvalの結果が格納されます。

MariaDB [test]> insert into t_user (user_id, name) values (1, 'name01');
MariaDB [test]> insert into t_user (user_id, name) values (2, 'name02');
MariaDB [test]> insert into t_user (user_id, name) values (3, 'name03');
MariaDB [test]> insert into t_user (user_id, name) values (11, 'name11');
MariaDB [test]> insert into t_user (user_id, name) values (12, 'name12');
MariaDB [test]> insert into t_user (user_id, name) values (13, 'name13');

MariaDB [test]> select * from t_user;
+---------+--------+--------+
| user_id | name   | seq_no |
+---------+--------+--------+
|       1 | name01 |      1 |
|       2 | name02 |      2 |
|       3 | name03 |      3 |
|      11 | name11 |      4 |
|      12 | name12 |      5 |
|      13 | name13 |      6 |
+---------+--------+--------+


sequenceが導入されてから、見落としていたのですが、なにげにこれは嬉しい。

公式にもこっそり書いてありました。

https://mariadb.com/kb/en/library/sequence-overview/

PERSISTENTタイプの生成カラムで設定できたら、変更不能な連番を作り出せたので、それがあっても良かったのかなと少し思います。(とはいえ変更不能も困るか。。)

なお、sequenceの上限は、

9223372036854775806

で、javaなどのlong型の限界値

9223372036854775807

より-1したものとなっています。

以上


コメントがあればどうぞ


CAPTCHA Image
Reload Image