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したものとなっています。
以上