推奨学習: mysql ビデオ チュートリアル
Oracle データベースで継続的に自己増加するデータ型の値が必要な場合は、シーケンスを作成することで実現できます。 MySQL データベースにはシーケンスがありません。通常、テーブルに自動インクリメント カラムが 1 つだけ必要な場合は、MySQL の auto_increment を使用できます (テーブルには自動インクリメント主キーが 1 つだけあります)。 Oracle のような MySQL でシーケンスを使用したい場合、どうすればよいでしょうか?
たとえば、次のテーブル定義があります:
create table `t_user`( `id` bigint auto_increment primary key, `user_id` bigint unique comment '用户ID', `user_name` varchar(10) not null default '' comment '用户名' );
ここで、user_id には自動インクリメント、順序、および一意性が必要です。 。条件を満たす値を取得するにはスノーフレークアルゴリズムやRedisやZookeeperを使うなど実装方法はたくさんありますが、ここでは一つ一つ紹介しません。ここでは、MySQL の auto_increment と last_insert_id() を使用して、Oracle と同様のシーケンスを実装する方法を紹介します。
例は次のとおりです:
create table `t_user_id_sequence` ( `id` bigint not null auto_increment primary key, `t_text` varchar(5) not null default '' comment 'insert value' );
delimiter && create procedure `pro_user_id_seq` (out sequence bigint) begin insert into t_user_id_sequence (t_text) values ('a'); select last_insert_id() into sequence from dual; delete from t_user_id_sequence; end && delimiter ;
call pro_user_id_seq(@value); select @value from dual;
ストアド プロシージャを使用するには、次のことを行う必要があります。ストアドプロシージャを一度呼び出してから代入するのは少し面倒です。
delimiter && create function user_id_seq_func() returns bigint begin declare sequence bigint; insert into t_user_id_sequence (t_text) values ('a'); select last_insert_id() into sequence from dual; delete from t_user_id_sequence; return sequence; end && delimiter ;
select user_id_seq_func() from dual; insert into t_user (user_id, user_name) values (user_id_seq_func(), 'java'); select * from t_user;
推奨学習: mysql ビデオチュートリアル######
以上がMySQLでのシーケンス Sequenceの使い方まとめの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。