序列SEQUENCE是SQL Server 2012及以上版本引入的一种新对象,可以生成不重复的数字序列,用于生成主键或其他需要连续数字的场景。
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用法介绍
基础教程推荐
- Kettle连接Oracle数据库方法((Oracle19c&Oracle11g)) 2023-07-23
- Navicat连接MySQL提示1045错误解决(重置MySQL密码) 2023-08-06
- MySQL详细汇总常用函数 2023-08-06
- windows下redis服务启动出现问题或者闪退 2023-09-13
- Redis在windows下的安装配置服务 2023-09-12
- mysql数据库sql优化原则(经验总结) 2023-12-06
- MySql数据库备份的几种方式 2023-12-29
- 关于Oracle多表连接,提高效率,性能优化操作 2023-12-31
- MySQL分库分表后路由策略设计详情 2022-08-31
- Mysql DBA 20天速成教程 2024-01-01