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したものとなっています。
以上
コメントがあればどうぞ