Sybase identity 字段
2016-10-24 13:54
253 查看
1、identity
Oracle, DB2, pgSQL中都有sequence的概念,这个概念比Identity先进很多,在Sybase中没有Sequence对象,与之相对应的是Identity
2、identity 的创建
identity跟sequence对象完成的功能类似,但是有一定的约束,每个table只能有一个identity的列,列的类型必须是numberic(n,0).
sql 代码
create table table_name
(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 代码
create table table_name
(column_name numeric(precision ,0) identity)
with identity_gap = value
这个value值会覆盖db 默认的是identity 字段最大值的 0.05%这个值。
在Sybase中使用
sp_chgattribute ‘TableName’, ‘identity_gap’, gap_value
来更改gap_value为一个合理的值
5、@@IDENTITY
可以使用 select @@IDENTITY 获取 insert 之后的值
原文地址
Oracle, DB2, pgSQL中都有sequence的概念,这个概念比Identity先进很多,在Sybase中没有Sequence对象,与之相对应的是Identity
2、identity 的创建
identity跟sequence对象完成的功能类似,但是有一定的约束,每个table只能有一个identity的列,列的类型必须是numberic(n,0).
sql 代码
create table table_name
(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 代码
create table table_name
(column_name numeric(precision ,0) identity)
with identity_gap = value
这个value值会覆盖db 默认的是identity 字段最大值的 0.05%这个值。
在Sybase中使用
sp_chgattribute ‘TableName’, ‘identity_gap’, gap_value
来更改gap_value为一个合理的值
5、@@IDENTITY
可以使用 select @@IDENTITY 获取 insert 之后的值
原文地址
相关文章推荐
- Sybase12.5建表时,发生类型为int的字段不能设为identity
- 【转】 Sybase identity 字段
- sybase字段属性,identity,设置跳跃值,手工插入自增初始值
- Sybase identity 字段
- 数据库字段类型与java.sql.types的对应-Sybase
- 表字段identity
- sybase按照一定顺序导出bcp out表的某些字段
- 重新置位identity字段,讓下個值從1開始
- 达梦数据库(DaMeng)如何删除IDENTITY自增属性字段
- SQL 重置自动增长型字段,IDENTITY字段 标识字段
- SQL2005中使用identity_insert向自动增量字段中写入内
- PHP中查询SQL Server或Sybase时TEXT字段被截断的解决方法
- 数据库中identity字段不必是系统产生的唯一值 性能优化方法(新招)
- 解决通过identity字段关联的多个数据表插入问题
- Sql Server数据库中Identity类型字段的使用
- Asp.net Identity 系列之 怎样修改Microsoft.AspNet.Identity.EntityFramework.IdentityUser 的 Id 字段的数据类型
- [sybase]自动增长字段创建方法
- select @@Identity 返回自动递增字段的值。
- [DB][MySql]关于取得自增字段的值、及@@IDENTITY 与并发性问题
- AUTO INCREMENT 字段【MS SQL 使用 IDENTITY 关键字来执行 auto-increment 任务】