在SAP HANA中,我们使用序列。
但是我不确定要重置的内容
我使用select max(ID) from tbl
还是max(ID) + 1 from tbl
?
我们最近在ID字段上遇到了唯一的受限违规。
并将序列定义为select max(ID) from tbl
避免“重置为”选项是否更好?
答案 0 :(得分:1)
RESET BY
子句的通用逻辑是检查当前值(max(ID)
)并添加偏移量(例如+1
),以避免对键值进行双重分配。 / p>
不使用该选项将有效地禁用将当前序列值自动设置为不会与现有存储值冲突的值的功能。
提供一些上下文信息:通常,序列号生成器使用高速缓存(即使默认情况下未设置)也可以高速使用序列号。 如果发生系统故障,则在数据库未保留已从缓存中以可恢复的方式获取了哪些编号的信息的意义上,尚未使用的缓存中的编号将“丢失”。
通过使用RESET BY
子句,可以减少数字的“损失”,因为该序列可以重新设置为最后一个实际使用的序列号。