SQL Server序列SEQUENCE用法介绍
序列SEQUENCE是什么?
序列SEQUENCE是SQL Server 2012及以上版本引入的一种新对象,可以生成不重复的数字序列,用于生成主键或其他需要连续数字的场景。
如何创建序列SEQUENCE?
可以使用以下语法创建序列SEQUENCE:
CREATE SEQUENCE [schema_name . ] sequence_name
[ AS [ built_in_integer_type | user-defined_integer_type ] ]
[ START WITH <constant> ]
[ INCREMENT BY <constant> ]
[ { MINVALUE <constant> } | { NO MINVALUE } ]
[ { MAXVALUE <constant> } | { NO MAXVALUE } ]
[ CYCLE | { NO CYCLE } ]
[ { CACHE [ <constant> ] } | { NO CACHE } ]
其中:
- schema_name是可选项,表示序列所属的模式名称,默认为dbo;
- sequence_name是生成的序列名称;
- built_in_integer_type或user-defined_integer_type是可选项,用于定义序列的数据类型,默认为bigint;
- START WITH参数定义序列的起始值,默认为1;
- INCREMENT BY参数定义序列每次增长的量,默认为1;
- MINVALUE和MAXVALUE参数定义序列可以的最小值和最大值;
- CYCLE参数表示当序列到达最大值时是否循环重新开始,默认为不循环;
- CACHE参数表示序列值的缓存数量,可以提高性能。
例如,创建一个起始值为100,每次自增5,最大值为1000的序列:
CREATE SEQUENCE my_sequence
START WITH 100
INCREMENT BY 5
MAXVALUE 1000;
如何使用序列SEQUENCE?
使用序列SEQUENCE时,可以通过NEXT VALUE FOR语句获取下一个序列值。例如:
SELECT NEXT VALUE FOR my_sequence;
每次执行此语句,都会返回一个不重复的序列值,直到达到序列的最大值。
可以使用序列序列创建表的主键。例如:
CREATE TABLE my_table
(
id bigint PRIMARY KEY DEFAULT NEXT VALUE FOR my_sequence,
name varchar(50) NOT NULL
)
上面的语句将会创建一个带有自动生成主键的表。
示例
示例1:根据序列值自动生成编号
CREATE SEQUENCE order_sequence
START WITH 1000
INCREMENT BY 1
MAXVALUE 99999;
CREATE TABLE orders
(
order_id varchar(20) PRIMARY KEY DEFAULT 'ORD' + RIGHT(REPLICATE('0',5) + CAST(NEXT VALUE FOR order_sequence AS varchar(5)),5),
customer_id int NOT NULL,
amount decimal(10,2) NOT NULL
);
上面的代码创建了一个序列,用于生成订单编号。在创建orders表时,使用了序列的NEXT VALUE FOR语法来生成默认的主键值,即订单编号。可以看到,订单编号由ORD和序列值拼接而成,并保证了值的唯一性和连续性。
示例2:给员工生成工号
CREATE SEQUENCE employee_sequence
START WITH 100
INCREMENT BY 1
MAXVALUE 999;
CREATE TABLE employees
(
id int PRIMARY KEY DEFAULT NEXT VALUE FOR employee_sequence,
name varchar(50) NOT NULL,
title varchar(50) NOT NULL
);
上面的代码创建了一个序列,用于生成员工工号。在创建employees表时,使用了序列的NEXT VALUE FOR语法来生成默认的主键值,即员工工号。可以看到,员工工号由序列值自动生成,并保证了值的唯一性和连续性。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:SQL Server序列SEQUENCE用法介绍 - Python技术站