我来说说数据库中的identity gap问题

1:identity
Oracle, DB2, pgSQL中都有sequence的概念,这个概念比Identity先进很多,在Sybase中没有Sequence对象,与之相对应的是Identity
2:identity 的创建
identity跟sequence对象完成的功能类似,但是有一定的约束,每个table只能有一个identity的列,列的类型必须是numberic(n,0).
sql 代码
 
  1. create table table_name  
  2. (column_name numeric(precision ,0) identity)  

3:identity gap的产生:
缺省情况下Sybase Adaptive Server会给identity字段分配一段数字到内存中,在磁盘上记录被分派到内存中的最大的数值,
这样就不用每次插入数据都需要写磁盘来记录当前identity的最大值,而是直接在内存中计算,以提高performance,默认分配到内存的
数值段是identity 字段最大值的 0.05%,这样虽然提高了效率但是如果server fail或者no wait重起,那么内存中的数字段就会丢失,DB Server
会从记录在磁盘上的identity最大值开始计算identity值,就会产生gap,如果按照默认值来计算,server fail 和no wait重起2000次,那么
identity字段就会溢出,必须增加identity字段的长度,其实这期间会有大量的gap
4:要点提示:
a:定义identity时要对数据量有个良好的估计,例如上面的代码中identity的最大值时10的precision次幂-1,对于所有的identity都定义
numberic(18,0)是不合适的,不可能所有的表都有几十万亿的数据量
b:定义identity时要对数据量的增长情况有个良好的估计,合理设置idnetity_gap的值,而不是默认的值
sql 代码
 
  1. create table table_name  
  2. (column_name numeric(precision ,0) identity)  
  3. with identity_gap = value  

这个value值会覆盖db 默认的是identity 字段最大值的 0.05%这个值。
5:如果我已经犯了这个错误我改怎么办?
在Sybase中使用
sp_chgattribute 'TableName', 'identity_gap', gap_value
来更改gap_value为一个合理的值
SQL Server 自增长列插入指定值 set IDENTITY_INSERT ON | OFF 1.每一次连接会话中的任一时刻,只能对一个表设置IDENTITY_INSERT ON,且设置只对当前会话有效;2.在对标识列执行插入操作进,一定要列出此标识列(当然,同时也就需要列出相关的其他列了)。附:SQL Server帮助文档相关内容允许将显式值插入表的标识列中。语法参数database是指定的表所驻留的数据库名称。owner是表所有者的名称。table是含有标识列的表名。注释。 阅读详情

相关推荐

SYBASE ASE修复identity 类型字段数据的跳跃(译)

SYBASE ASE修复identity 类型字段数据的跳跃(译) 内容提要 1、引言 2、dbcc object_atts 3、下载'sp_identity' 存储过程 4、使用sp_identity显示使用identity 类型字段的表 5 使用sp_identity显示当前表的 identity 数字 6、使用sp_identity 修改表的 identity数字 ...

iihero@CSDN 626

sybase字段属性,identity,设置跳跃值,手工插入自增初始值

使用sybase时将id字段设置为identity属性,即为自增。 但是sybase中自增时有时会跳跃,即,上一条还是5,下一条可能一下跳到50000+了。 with identity_gap = 1 on 'default'可以设置跳跃值为1。 set identity_insert test_table on 手工插入identity的值 1000 再插入一条id就是1

bingkeer的博客 3506

ICC2: pin shape不在track上引起的drc如何解决?

我正在「拾陆楼」和朋友们讨论有趣的话题,你⼀起来吧?

m0_61544122的博客 378

Sybase使用 identity 完成主键自增

使用sybase 时将userId字段设置为identity属性,即为自增. 但是sybase中自增时有时会跳跃,即 上一条还是5,下一条可能一下跳到500000+ 了. with identity_gap = 1 可以设置跳跃值为1. CREATE TABLE k_user( userId bigint identity, userName varchar(10) NULL, pa...

smile_yue的博客 3996

sybase数据库identity指定值

直接看代码   create table test( id int identity, name varchar(100) )   insert into test(name) values('MyKings') set identity_insert test on insert into test(id,name) values(100,'test') set identi

为了理想一直在努力! 818

@@IDENTITY与SCOPE_IDENTITY()

Sybase 中不支持scope_identitysybase中无IDENT_CURRENT函数,而是next_identity(table)    在一条 INSERT、SELECT INTO 或大容量复制语句完成后,@@IDENTITY 中包含语句生成的最后一个标识值。如果语句未影响任何包含标识列的表,则 @@IDENTITY 返回 NULL。如果插入了多个行,生成了多个标识值,则 ...

C_sdn_000000的专栏 265

Sybase identity 字段

1、identityOracle, DB2, pgSQL中都有sequence的概念,这个概念比Identity先进很多,在Sybase中没有Sequence对象,与之相对应的是Identity2、identity 的创建identity跟sequence对象完成的功能类似,但是有一定的约束,每个table只能有一个identity的列,列的类型必须是numberic(n,0).sql 代码crea

Rainnnbow 1228

【转】 Sybase identity 字段

<br />Sybase identity 字段<br /><br />http://ewoyaofei.blog.163.com/blog/static/343562612010314115446284/<br /> <br /><br />1、identity<br />Oracle, DB2, pgSQL中都有sequence的概念,这个概念比Identity先进很多,在Sybase中没有Sequence对象,与之相对应的是Identity<br />2、identity 的创建<br />ident

strawbingo的专栏 2412

SET IDENTITY_INSERT

     想要将值插入到自动编号(或者是标识列,IDENTITY)中去,需要设定 SET IDENTITY_INSERT示例:1.首先建立一个有标识列的表:CREATE TABLE products (id int IDENTITY PRIMARY KEY, product varchar(40))

luzhuxi的专栏 4210

SQL Server -- SET IDENTITY_INSERT ON|OFF

<br />想要将值插入到自动编号(或者是标识列,IDENTITY)中去,需要设定 SET IDENTITY_INSERT<br />示例:<br />1.首先建立一个有标识列的表:<br />CREATE TABLE products (id int IDENTITY PRIMARY KEY, product varchar(40))<br />2.尝试在表中做以下操作:<br />INSERT INTO products (id, product) VALUES(3, 'garden shovel')

FANET 6480

identity gap issue

[url]http://www.sypron.nl/idgaps_txt.html[/url] Why "identity gaps" occur Identity gaps can occur following a rough server shutdown ("shutdown with nowait") or a crash of the server process. This ...

渴死的火烈鸟 354

sybase identity数值重置

http://hi.baidu.com/blue_ranger/item/54b1f79a9a9dc6f02916479c     sybase identity数值重置 he depends on exactly what version you have, and on exactly what the situation is with your data. If it's a

罗罗的专栏 2177

Sybase 中文乱码解决办法和sybase :set IDENTITY_INSERT

Sybase 中文乱码解决办法 解决Sybase中文问题 (http://blog.csdn.net/kingspider/) (http://blog.sina.com.cn/u/1163490885) 1.     JDBC连接串要有字符集设置 jdbc:sybase:Tds:192.168.3.11:5000/Wfis_db?charset=cp936 2.

xuguiyi100的专栏 6224

Sql Server数据库Identity类型字段的使用

大家在创建数据库的时候肯定是经常使用Identity标识字段类型的。下面就介绍两个使用这种类型字段的小技巧。1.让标识字段从指定的数字开始计数:DBCC checkident (TableName,reseed,计数值-1)如:让customers表重新从1开始计数dbcc checkident(customers,reseed,0)--从0+1即1开始计数2.由于identi

Teng_s2000的专栏 6359

Sybase set IDENTITY_INSERT on 和 off

格式:   set IDENTITY_INSERT 表名 on   set IDENTITY_INSERT 表名 off

Web开发Q&A 2008

在对Sybase中进行插入数据出现set_identity_insert is off

在对Sybase中进行插入数据出现set_identity_insert is off sybase :set IDENTITY_INSERT 有关设置明 这是因为‍使用sybase时将id字段设置为identity属性,即为自增。 解决方法: ‍使用命令即可:set IDENTITY_INSERT on 解释:‍ 1、set IDENTITY_INSERT on和off 的设置(如何自增字段中插入指定值) 批量插入记录时,对有标识列的字段要设置 set IDENTITY_INSERT 表..

zhangvalue的博客 1372

SYBASE锁类型与常用命令

-------------------------------------------------查杀锁-------------------------------------------------sp_whosp_lock 156kill 156dbcc traceon(3604)是把dbcc的结果输出到屏幕上。dbcc sqltext(pid)是看指定的sy

4972

Sybase12.5.2分页问题

1. 使用临时表方法:                stmt = conn.getConn().createStatement();                String strsql = "select *, ids=identity(9) into #tb from tablename";   //表复制速度很快,不影响效率                stmt.execute(

田田的菜坛子 948

【考研复试】西安电子科技大学上机题

【考研复试】西安电子科技大学上机题

全网粉丝30W+,CSDN、稀土掘金人工智能领域签约作者,人工智能、大模型、Python 爬虫,商务合作,请私信沟通。 1704

1872年至2025年国际足球成绩-数据集

该数据集包括从 1872 年第一场正式比赛到 2025 年的 47,917 场国际足球比赛结果。比赛范围从 FIFA 世界杯到 FIFI Wild Cup,再到常规友谊赛。这些比赛严格来是男子全国际比赛,数据不包括奥运会或至少有一支球队是该国 B 队、U-23 或联赛精选球队的比赛。results.csv包括以下列:date- 比赛日期home_team- 主队名称away_team- 客队名称home_score- 全场主队得分,包括加时赛,不包括点球大战away_score- 全场客队得分,包括加时赛,不包括点球大战tournament- 比赛名称city- 比赛进行的城市/城镇/行政单位的名称country- 比赛所在国家/地区的名称neutral- TRUE/FALSE 列指示比赛是否在中立场地进行shootouts.csv包括以下列:date- 比赛日期home_team- 主队名称away_team- 客队名称winner- 点球大战的获胜者first_shooter- 在点球大战中率先获胜的球队goalscorers.csv包括以下列:date- 比赛日期home_team- 主队名称away_team- 客队名称team- 进球的球队名称scorer- 进球的球员姓名own_goal- 进球是否乌龙球penalty- 进球是否为点球former_names.csv包括以下列:current- 当前使用的团队名称(如果团队不再存在,则为姓氏)former- 该团队使用的旧名称start_date- 使用以前名称的开始日期end_date- 使用旧名称的结束日期

上一篇: PreparedStatement真的比Statement快吗?
下一篇: javascript对象的property和prototype是这样一种关系
iteye_1989
博客等级 码龄8年 0粉丝 14原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值