SQL Server 中,`timestamp` 和 `rowversion`类型特性

在 SQL Server 中,timestamp 和 rowversion 是用于标识行版本的特殊数据类型,rowversion 是 timestamp 的新名称和推荐的替代品,可以理解为rowversion 是 timestamp 的同义词。:


1. timestamp

  • 本质 :
    timestamp 是 SQL Server 的一种数据类型,用于表示数据库中某行的版本号。它在每次插入或更新操作时自动更改,确保行的版本号是唯一的。

  • 特性:

    • 是一个 8 字节的二进制数字(binary(8))。
    • 只在数据库范围内唯一。
    • timestamp 本身与时间无关,名字可能会让人误解。
    • 系统自动分配,不允许显式设置值。
  • 主要用途 :

    用于检测并发更改。例如,在处理并发更新时,可以通过检查行的 timestamp 是否发生变化来检测是否有其他事务修改了同一行。

  • 注意 :
    timestamp 数据类型已被标记为弃用 ,并建议使用 rowversion 替代。


2. rowversion

rowversion 是更现代、更直观 的命名,且作为替代方案,避免了 timestamp 的误解。但timestamp 和 rowversion 在功能和行为上是完全一致的,实际上可以认为 rowversion 是 timestamp 的一个别名。二者在 SQL Server 中使用相同的内部机制来实现行版本控制。


实际使用示例

sql 复制代码
-- 创建一个包含 rowversion 列的表
CREATE TABLE ExampleTable (
    ID INT PRIMARY KEY,
    Data NVARCHAR(100),
    Version ROWVERSION -- 定义行版本列
);

-- 插入数据
INSERT INTO ExampleTable (ID, Data) VALUES (1, 'Initial Data');

-- 查看数据
SELECT * FROM ExampleTable;

-- 更新数据并观察版本号变化
UPDATE ExampleTable
SET Data = 'Updated Data'
WHERE ID = 1;

-- 再次查看数据
SELECT * FROM ExampleTable;

通过 rowversion 列,开发者可以检测行是否已被修改,并基于此实现更高效的并发控制。

相关推荐
Elastic 中国社区官方博客4 小时前
将你自己的密钥用于现有 Elastic Cloud 部署
大数据·数据库·elasticsearch·全文检索
红海云4 小时前
Jev:给智能系统做判断的模型
大数据·数据库·人工智能
wjkjpcba4 小时前
PCBA烧录程序是什么:PCBA包工包料厂家解析烧录与测试
linux·数据库·人工智能·smt贴片加工·pcba贴片加工厂
꯭自꯭闭꯭5 小时前
达梦事物特性及MVCC
linux·运维·数据库
小马同学-5 小时前
MySQL主从复制和读写分离
数据库·mysql
谢亮_vipxieliang5 小时前
Spring 事务失效的常见场景
java·开发语言·数据库·spring boot
geovindu6 小时前
sql: JSON and XML Data Handling in SQL using sql server 2025
大数据·数据库·sqlserver·数据库开发·数据库架构
IT大白鼠6 小时前
图数据库系列 · 第 02 篇——架构拆解:原生图存储到因果集群
数据库·架构·nosql
EatFan7 小时前
从“框架混战“到“运行时收敛“:2026 年 AI Agent 开发框架的三条路线之争
java·数据库·人工智能·多智能体·ai agent·mcp·agent 框架
小蒜学长7 小时前
基于SpringBoot的佳新超市管理系统设计与实现系统(代码+数据库+LW)
java·数据库·spring boot·后端·佳新超市管理系统