MySQL 序列使用


MySQL 序列(Sequence)使用指南

MySQL 序列(Sequence)是 MySQL 8.0 引入的新功能,它允许用户创建一个数字序列,用于生成自增数字。本文将详细介绍如何创建、使用 MySQL 序列。

创建序列

创建序列需要使用 CREATE SEQUENCE 命令,语法如下:

CREATE [TEMPORARY] SEQUENCE [IF NOT EXISTS] sequence_name
[START WITH (start_value)]
[INCREMENT BY (increment_value)]
[MINVALUE (min_value)]
[MAXVALUE (max_value)]
[{CYCLE | NO CYCLE}]
[{CACHE | NO CACHE}]

参数说明:

  • TEMPORARY:序列是否为临时序列。若指定 TEMPORARY,则该序列只在当前 MySQL 会话中有效,默认为永久序列。
  • IF NOT EXISTS:避免创建已经存在的序列。
  • sequence_name:序列名称。
  • START WITH:指定起始值,默认为 1。
  • INCREMENT BY:每次增加的值,默认为 1。
  • MINVALUE:序列可使用的最小值,默认为 -9,223,372,036,854,775,808。
  • MAXVALUE:序列可使用的最大值,默认为 9,223,372,036,854,775,807。
  • CYCLE:是否循环使用。若指定 CYCLE,当序列到达 MAXVALUE 时,会从 MINVALUE 重新开始循环使用,默认不循环。
  • CACHE:序列缓存的值数量,默认为 100。

下面是一个示例,创建一个名为 user_id_seq 的序列,起始值为 100,每次增加 1,最小值为 0,最大值为 999,循环使用,并缓存 50 个值:

CREATE SEQUENCE IF NOT EXISTS user_id_seq 
START WITH 100
INCREMENT BY 1
MINVALUE 0
MAXVALUE 999
CYCLE
CACHE 50;

使用序列

创建好序列后,可以使用 NEXT VALUE FOR 命令获取下一个序列值。示例:

SELECT NEXT VALUE FOR user_id_seq;

这将返回 user_id_seq 序列的下一个值。

另外,我们还可以使用 PREVIOUS VALUE FOR 命令获取上一个序列值。例如:

SELECT PREVIOUS VALUE FOR user_id_seq;

返回 user_id_seq 序列的上一个值。需要注意的是,当序列循环使用之后,上一个值可能会大于当前值,但这不会影响 NEXT VALUE FOR 命令的正确性。

删除序列

可以使用 DROP SEQUENCE 命令删除一个序列,示例:

DROP SEQUENCE user_id_seq;

若指定了 IF EXISTS,则即使序列不存在,也不会报错。

总结

本文介绍了 MySQL 序列的创建、使用和删除方法。使用 MySQL 序列可以方便地生成自增数字,并且支持缓存和循环使用等功能,可在一些自动生成 ID 的场景下发挥作用。