MariaDB10.3で導入されたSequenceですが、
便利な反面、注意しなければいけないことが2つありましたので、
記載しておきます。
(ひとつめ)
テーブルのdefault値にすると、名前次第でmysqldumpから復元できない。
これは以前書いた記事の話です。
たとえば、以下のようなテーブルシーケンスを作成します。
MariaDB [test]> create sequence t_user_seq increment by 0;
MariaDB [test]> create table t_user ( -> user_id int not null, -> name varchar(32) not null, -> seq_no bigint not null unique default nextval(t_user_seq), -> primary key (user_id) -> );
この状態で、mysqldumpすると、以下のようにテーブルの定義が先に来てしまう関係上、リストアで失敗します。
-- -- Table structure for table `t_user` -- : : : -- -- Table structure for table `t_user_seq` --
これは名前順で出力されてしまう仕様上、t_user_seqが後に定義されてしまうため、リストアに失敗するという現象をおこします。
(ふたつめ)
show create table 中に、シーケンスの定義にスキーマ(データベース)名が含まれてしまう。
MariaDB [test]> show create table t_user; +--------+----------------------+ | Table | Create Table | +--------+----------------------+ | t_user | CREATE TABLE `t_user` ( `user_id` int(11) NOT NULL, `name` varchar(32) NOT NULL, `seq_no` bigint(20) NOT NULL DEFAULT nextval(`test`.`t_user_seq`), PRIMARY KEY (`user_id`), UNIQUE KEY `seq_no` (`seq_no`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 | +--------+----------------------+
test というスキーマ名が入ってきてしまっています。
これにより、別スキーマに、
create table ~ like test.t_user;
とかしてしまうと、シーケンスの参照がコピー元となってしまいます。
うっかりやりそうなミスなので、ご注意ください。
以上
コメントがあればどうぞ