Oracle NoSQL是否支持为列自动生成系统时间戳?
Oracle NoSQL数据库侧自动生成系统时间戳实现方案
Oracle NoSQL 支持服务端自动生成系统时间戳能力,可完全规避应用侧时间与数据库提交时间的偏差问题,具体实现可通过以下三种方式完成:
- 内置SQL函数直接调用
数据库提供内置函数SYSTIMESTAMP,返回数据库节点当前的系统时间戳,精度最高可达纳秒,你可以直接在INSERT或UPDATE语句中调用该函数填充timeUpdated列,无需应用侧传入时间值:
如果需要毫秒级精度的Unix时间戳整数值,也可以将-- 新增行时填充服务端时间 INSERT INTO your_table (id, content, timeUpdated) VALUES (1, '测试内容', SYSTIMESTAMP); -- 更新行时刷新为最新服务端时间 UPDATE your_table SET content = '更新后的内容', timeUpdated = SYSTIMESTAMP WHERE id = 1;SYSTIMESTAMP替换为current_time_millis()函数,返回1970年1月1日以来的毫秒数。 - 建表时配置自动生成列
你可以在建表时直接将timeUpdated定义为自动生成列,后续所有写入、更新操作都不需要手动操作该列,数据库会自动在事务提交时填充最新的服务端时间,建表示例如下:CREATE TABLE your_table ( id INTEGER PRIMARY KEY, content STRING, timeUpdated TIMESTAMP GENERATED ALWAYS AS (SYSTIMESTAMP) ) - SDK侧直接指定函数值
各语言官方SDK均支持直接指定列取值为服务端函数,无需手动拼接SQL语句。以Java SDK为例,更新时的写法参考如下:UpdateRequest req = new UpdateRequest() .setStatement("UPDATE your_table SET content = :content, timeUpdated = SYSTIMESTAMP WHERE id = :id") .putVariable("content", "新的业务值") .putVariable("id", 1);
内容的提问来源于stack exchange,提问作者devappsnosql75
相关产品推荐
相关产品推荐

