在SAP HANA中,我们使用序列。
但是我不确定要为重置定义什么
我使用select max(ID) from tbl
或max(ID) + 1 from tbl
?
我们现在得到了ID字段的唯一约束违规。
序列定义为select max(ID) from tbl
还有更好的方法来避免“重置”选项吗?
RESET BY
子句的通用逻辑是检查当前值(max(ID)
)并添加偏移量(例如+1
)以避免密钥值的双重分配。
不使用该选项会有效禁用将当前序列值自动设置为不会与现有存储值冲突的值的功能。
提供一些上下文:通常序列号生成器使用缓存(即使它没有默认设置)以允许高速消耗序列号。在系统故障的情况下,在数据库不保留以可恢复的方式提取来自高速缓存的数字的信息的意义上,尚未消耗的高速缓存中的数字“丢失”。
通过使用RESET BY
子句,当序列被设置回最后实际使用的序列号时,可以减少数字的“丢失”。