程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> SyBase數據庫 >> SyBase教程 >> Sybase identity 字段

Sybase identity 字段

編輯:SyBase教程

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 之後的值

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved