mysql seq 重置_需要在Oracle中重置序列的值
小编典典
如果使用该值,则不应重置该值的原因:
如果你有20条记录并删除5-10条记录会怎样?中间有一个缝隙,无法重新设置序列。序列永远不会生成无间隙的数字序列,即完美的1、2 .. n。
如果你调用.nextval并且不使用该值,它就消失了。你要删除并重新创建序列吗?如果开始插入并取消插入,Oracle 将回滚所做的操作,这些值将消失。如果你设置了该选项,nocache则差距将较小,但会降低性能。这值得么?
你的缓存应设置为希望在所有会话中一次执行的插入次数,以避免任何性能问题。序列旨在提供一种非常快速,可扩展的方式来创建代理密钥,而无需任何锁等,以免重新生成正整数集。
归根结底,这丝毫没有关系。如果你将不间断的序列作为表的键,则你的数据而不是序列会出现问题。
回答问题:
要实际回答你的问题,你需要:
首先,找出表中的最大id(序列)值。
然后放下并重新创建序列。
找到最大值意味着你需要动态地重新创建序列,而又要牺牲性能。
如果在这种情况下尝试将某些东西插入表中,它将失败,并且可能会使使用该序列的任何触发器或其他对象无效:
declare
l_max_value number;
begin
select max(id)
into l_max_value
from my_table;
execute immediate 'drop sequence my_sequence_name';
-- nocache is not recommended if you are inserting more than
-- one row at a time, or inserting with any speed at all.
execute immediate 'create sequence my_sequence_name
start with ' || l_max_value
|| ' increment by 1
nomaxvalue
nocycle
nocache';
end;
/
正如我所说,不建议这样做,你应该忽略任何差距。
更新-又名更好的答案感谢Jeffrey Kemp:
正如杰弗里·肯普(Jeffrey Kemp)在评论中所建议的那样,有一种与文档建议相反的方法,该方法无需删除并重新创建序列即可。
即,通过:
计算id表中的最大值与序列的当前值之间的差。
更改顺序以此负数递增
更改顺序以再次增加1。
这样做的好处是对象仍然存在,并且触发器,授权等也得以维护。如我所见,其不利之处在于,如果另一个会话与你的会话同时增加此负数,则你可能退得太远。
这是一个示范:
设置测试:
SQL> create sequence test_seq
2 start with 1
3 increment by 1
4 nomaxvalue
5 nocycle
6 nocache;
Sequence created.
SQL>
SQL> create table tmp_test ( id number(16) );
Table created.
SQL>
SQL> declare
2 l_nextval number;
3 begin
4
5 for i in 1 .. 20 loop
6 insert into tmp_test values ( test_seq.nextval );
7 end loop;
8
9 end;
10 /
PL/SQL procedure successfully completed.
SQL>
SQL> select test_seq.currval from dual;
CURRVAL
----------
20
SQL>
SQL> delete from tmp_test where id > 15;
5 rows deleted.
SQL> commit;
Commit complete.
还原顺序
SQL>
SQL> declare
2
3 l_max_id number;
4 l_max_seq number;
5
6 begin
7
8 -- Get the maximum ID
9 select max(id) into l_max_id
10 from tmp_test;
11
12 -- Get the current sequence value;
13 select test_seq.currval into l_max_seq
14 from dual;
15
16 -- Alter the sequence to increment by the difference ( -5 in this case )
.
17 execute immediate 'alter sequence test_seq
18 increment by ' || ( l_max_id - l_max_seq );
19
20 -- 'increment' by -5
21 select test_seq.nextval into l_max_seq
22 from dual;
23
24 -- Change the sequence back to normal
25 execute immediate 'alter sequence test_seq
26 increment by 1';
27
28 end;
29 /
PL/SQL procedure successfully completed.
SQL>
SQL> select test_seq.currval from dual;
CURRVAL
----------
15
SQL>
2020-04-13
mysql seq 重置_需要在Oracle中重置序列的值相关推荐
- Oracle中的序列,同义词
Oracle中的序列,同义词 2006年08月18日 星期五 下午 01:51 什么叫序列: 1:定义: 仅向前的数字变量(和SQL中的自动编号有点像 identity(1,2 ...
- mysql自定义函数实现,自定义oracle中decode方法
要想知道怎么定义第一步要知道oracle中decode是怎么实现呢? decode(expression,value1,result1,value2,result2,value3,result3-,d ...
- 【mysql】使用变量实现类似oracle中lag函数功能
mysql使用变量实现类似oracle中的lag函数功能 说明: 有一个订单表,每次下单都会记录是否使用了券,现模拟一个需求,将订单表插入日志表达到记录用户上一次是否用券以及此订单是否用券的情况 #- ...
- ip设置 kali 重置_在 Windows 系统中如何重置 TCP/IP 协议堆栈修复网络连接问题
Internet 在 TCP/IP 协议上工作,如果 TCP/IP 协议堆栈在 Windows 或任何其他操作系统(例如 Linux 或 MacOS)中无法正常工作,则您的 Internet 连接会出 ...
- docker容器mysql头文件_在Docker容器中使用MySQL数据库
开发过程中经常需要安装.调试mysql数据库,还需要在各种操作系上安装包依赖,实在是繁琐,因此就研究了一下如何在docker上运行一个mysql镜像,省却了我安装.找依赖的问题. 注:本文所有内容均在 ...
- mysql 分段执行_了解一下项目中常用的19条MySQL优化
一.EXPLAIN 做MySQL优化,我们要善用 EXPLAIN 查看SQL执行计划. 下面来个简单的示例,标注(1,2,3,4,5)我们要重点关注的数据 · type列,连接类型.一个好的sql语句 ...
- access自动编号怎么解除_如何在 Access 中重置“自动编号”字段值
如何在 Access 中重置"自动编号"字段值 中删除某个表中的一些行或所有行时,"自动编号"字段不会自动重置.要重置"自动编号"字段值并 ...
- seq生成序列-f参数_使用seq()函数在R中生成序列
seq生成序列-f参数 Generating a sequence in R using the function seq() is vital and has many uses in data a ...
- Oracle 中的序列
一.前言 序列 (SEQUENCE) 是序列号生成器,可以为表中的行自动生成序列号,产生一组等间隔的数值(类型为数字).不占用磁盘空间,占用内存. 其主要用途是生成表的主键值,可以在插入语句中引用,也 ...
最新文章
- 水平,垂直居中的15种方法
- QDoc关联事物Relating Things
- winform程序打包成exe文件
- 信息学奥赛C++语言:等级化的成绩
- Multiple methods named 'status' found with mismatched result, parameter type or attributes
- js学习总结--持续更新(2)
- Unity3D之Material(材质、着色器、纹理)
- javaweb 初学建议
- 《Linux 性能及调优指南》1.4 硬盘I/O子系统
- [转]Vs解决方案的目录结构设置和管理
- Keil MDK 5安装了GD32 pack包工程里却找不到
- 计算机右键管理没有管理员权限,鼠标右键为何没有获得管理员权限
- 用 js判断 一个数是否是素数(质数)_Javascript 判断一个数是不是素数
- ssh pem登陆及pem是什么
- html表格如何创建搜索,6.如何创建HTML表格
- 以非本地Administrator身份登录的客户机无法访问服务器共享文件夹,显示句柄无效。
- gbk2312拼音表 按词频排好序的
- 【安全知识分享】2021年安全生产月主题宣讲课件(附下载)
- 华为摄像头采集自动聚焦崩溃
- 大数据技术学习推荐书籍(一)
热门文章
- 在Vue中遇到的各种坑 及性能提升
- 【敏捷测试】一个测试人员在参与敏捷测试的经验分享(3)
- 51Nod1556 计算
- 读取一个文件,获取其中出现次数最多的前五个字符以及次数
- 【AR实验室】OpenGL ES绘制相机(OpenGL ES 1.0版本)
- 经验总结02-sql语句
- vs.net web项目使用visual source safe进行源代码管理(转)
- 浅析Codewarrior、IAR和Keil MDK三大开发环境优缺点
- 计算机视觉:值得一读的五本计算机视觉教科书
- TensorFlow 2.0 极简教程,不到 20 行代码带你入门