当前位置: 首页 > news >正文

SQL SERVER Sequence Number 序列号

SequenceNumber是SQL Server2012推出的一个 新特性。这个特性允许数据库级别的序列号在多表或 多列之间共享。对于某些场景会非常有用,比如,你 需要在多个表之间公用一个流水号。以往的做法是额 外建立一个表,然后存储流水号。而新插入的流水号
需要两个步骤:
1.查询表中流水号的最大值
2.插入新值(最大值+1)
现在,利用SQL Server2012中的Sequence.这类操 作将会变得非常容易。
SequenceNumber的概念并不是一个新概念,Oracle早就已经实现了

Identity:作用范围是限制本表
SequenceNumber是 一个与构架绑定的数据库级别的对象,而不是与具体 的表的具体列所绑定。
这意味着SequenceNumber带 来多表之间共享序列号的遍历之外,还会带来如下不 利影响:

• 与Identity列不同的是,Sequence插入表中的 序列号可以被Update,除非通过触发器来进行保护
• 与Identity列不同,Sequence有可能插入重复 值(对于循环SequenceNumber来说)
• Sequence仅仅负责产生序列号,并不负责控 制如何使用序列号,因此当生成一个序列号被 Rollback之后,Sequence会继续生成下一个号, 从而在序列号之间产生间隙【不连续】

SequenceNumber的用法 创建语法

CREATE SEQUENCE [schema_name . ] sequence_name
[ AS [ built_in_integer_type | user-defined_integer_type ] ]
[ START WITH ]
[ INCREMENT BY ]
[ { MINVALUE [ ] } |{ NO MINVALUE } ]
[ { MAXVALUE [ ] } |{ NO MAXVALUE } ]
[ CYCLE | { NO CYCLE } ]
[ { CACHE [ ] } | { NO CACHE } ]
[ ; ]

创建案例

Create Sequence dbo.demoSequence
as int
start with 1
Increment by 1

------------------
select next value for dbo.demoSequence

select name,type_desc,start_value,increment,minimum_value,maximum_value,current_value,is_cached,cache_size
Create Sequence dbo.demoSequence
as int
start with 1
Increment by 1
---------------------
create table #test (
  id int
)
--插入测试数据
declare @index int
set @index=0
while (@index<50)
begin
	insert into #test(id) values(next value for dbo.demoSequence)
	set @index=@index+1
end
----展示测试数据
select *  from #test

sequence 最重要的功能便是{因为它是数据库级别的}在多表间共享序列号

----------创建序列号-------------
Create Sequence dbo.demoSequence
as int
start with 1
Increment by 1
----------创建临时测试表t1和临时测试表t2------------------
create table #t1
(
	 id int
)
-----
create table #t2
(
	id int
)
-----插入测试数据
declare @index int
set @index=0
while (@index<50)
begin
	insert into #t1(id) values(next value for dbo.demoSequence)
	insert into #t2(id) values(next value for dbo.demoSequence)
	set @index=@index+1
end
-------展示测试数据

select *  from #t1 
select *  from #t2
#t1 ——> id:0,2,4,6...
#t2 ——> id:1,3,5,7...

----------创建序列号-------------
Create Sequence dbo.demoSequence
as int
start with 1
Increment by 1
MaxValue 5
MinValue 1
Cycle
----------创建临时测试表t1和临时测试表t2------------------
create table #t1
(
	 id int
)

-----插入测试数据
declare @index int
set @index=0
while (@index<20)
begin
	insert into #t1(id) values(next value for dbo.demoSequence)
	insert into #t2(id) values(next value for dbo.demoSequence)
	set @index=@index+1
end
-------展示测试数据
select *  from #t1 

#t1 ——> id:1,2,3,4,5,1,2,3,4,5,1....


重置

通过Alter修改Sequence将其初始化值指定为一个特定值

alter sequence dbo.demoSequence
reStart with 3

Sequence 缓存

简单来说就是一次生成多个序列号(个数=Cache指定的值),使得减少IO。

Create Sequence dbo.demoSequence
as int
start with 1
Increment by 1
MaxValue 5
MinValue 1
Cache 4

在这里插入图片描述

Sequence 注意事项

sequence 只负责生成序列号,而不管序列号如何使用,如果事物不成功或回滚,Sequence仍然会继承向后生成序列号
在这里插入图片描述

相关文章:

  • 【Web实战-Tomcat-Servlet-Thymeleaf -JDBC-MySQL】浏览器页面显示数据库数据(水果库存系统)
  • 【超好懂的比赛题解】2022CCPC四川省赛 个人题解
  • Pytest如何执行txt格式的文本测试
  • 目标检测算法——YOLOv5 结合Swin Transformer V2
  • Web3究竟红在哪里,它的出现能为人类社会带来什么?
  • 【学姐面试宝典】前端基础篇Ⅴ——JS深浅拷贝、箭头函数、事件监听等
  • 什么是web3.0
  • Keras深度学习实战(31)——构建电影推荐系统
  • 高薪程序员面试题精讲系列157之面试中的那些“黑话”,你知道多少?
  • 适合前端开发的VS Code插件
  • 计算机毕业设计node+vue基于微信小程序的西餐外卖系统 uniapp 小程序
  • 云原生 · DevOps`01 | 光速初识DevOps
  • 三天开发一个系统,奖金3k【源码开源】
  • 【CSS颜色指南】:看完这一篇就明白CSS常见颜色表示方法
  • 秋招笔试强训——day03
  • es的写入过程
  • OpenStack安装流程(juno版)- 添加网络服务(neutron)- controller节点
  • uni-app项目数字滚动
  • Vue 2.3、2.4 知识点小结
  • windows下如何用phpstorm同步测试服务器
  • 阿里中间件开源组件:Sentinel 0.2.0正式发布
  • 对超线程几个不同角度的解释
  • 极限编程 (Extreme Programming) - 发布计划 (Release Planning)
  • 京东美团研发面经
  • 聚簇索引和非聚簇索引
  • 理解在java “”i=i++;”所发生的事情
  • 前嗅ForeSpider教程:创建模板
  • 驱动程序原理
  • 算法之不定期更新(一)(2018-04-12)
  • 我感觉这是史上最牛的防sql注入方法类
  • 我这样减少了26.5M Java内存!
  • 阿里云服务器如何修改远程端口?
  • 翻译 | The Principles of OOD 面向对象设计原则
  • ​LeetCode解法汇总2182. 构造限制重复的字符串
  • ​如何在iOS手机上查看应用日志
  • #免费 苹果M系芯片Macbook电脑MacOS使用Bash脚本写入(读写)NTFS硬盘教程
  • #我与Java虚拟机的故事#连载13:有这本书就够了
  • #在线报价接单​再坚持一下 明天是真的周六.出现货 实单来谈
  • (32位汇编 五)mov/add/sub/and/or/xor/not
  • (C语言)深入理解指针2之野指针与传值与传址与assert断言
  • (LeetCode C++)盛最多水的容器
  • (poj1.3.2)1791(构造法模拟)
  • (超详细)语音信号处理之特征提取
  • (第9篇)大数据的的超级应用——数据挖掘-推荐系统
  • (附源码)springboot助农电商系统 毕业设计 081919
  • (删)Java线程同步实现一:synchronzied和wait()/notify()
  • (数位dp) 算法竞赛入门到进阶 书本题集
  • (小白学Java)Java简介和基本配置
  • (学习日记)2024.03.25:UCOSIII第二十二节:系统启动流程详解
  • (原创)Stanford Machine Learning (by Andrew NG) --- (week 9) Anomaly DetectionRecommender Systems...
  • (原創) 如何解决make kernel时『clock skew detected』的warning? (OS) (Linux)
  • (源码版)2024美国大学生数学建模E题财产保险的可持续模型详解思路+具体代码季节性时序预测SARIMA天气预测建模
  • (转)EOS中账户、钱包和密钥的关系
  • (转)Mysql的优化设置
  • .Net Remoting常用部署结构