首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

SQL Server时态表不为事务内的更新和删除保留删除历史记录

在SQL Server中,时态表(Temporal Table)是一种特殊类型的表,它用于存储某个实体在不同时间点的状态。时态表由两个表组成:一个当前表(Primary Table)和一个历史表(History Table)。当前表存储实体的当前状态,而历史表存储实体的历史状态。

默认情况下,时态表为事务内的更新和删除操作保留删除历史记录。这意味着当你更新或删除当前表中的记录时,这些更改会在历史表中生成相应的插入或删除记录。然而,有时你可能希望禁用这种行为,以便在事务内更新或删除记录时不保留删除历史记录。

要实现这一点,你可以使用以下方法之一:

方法一:使用系统版本控制开关

SQL Server 2016及更高版本支持系统版本控制开关,允许你在事务内更新或删除记录时不保留删除历史记录。你可以使用以下命令启用或禁用系统版本控制开关:

代码语言:javascript
复制
-- 启用系统版本控制开关
ALTER TABLE YourTemporalTable SET (SYSTEM_VERSIONING = ON (HISTORY_TABLE = YourHistoryTable, DATA_CONSISTENCY_CHECK = ON));

-- 禁用系统版本控制开关
ALTER TABLE YourTemporalTable SET (SYSTEM_VERSIONing = OFF);

方法二:使用触发器

如果你使用的是SQL Server 2016之前的版本,或者你需要更细粒度的控制,你可以使用触发器来实现类似的功能。你可以创建一个触发器,在更新或删除当前表中的记录时,阻止历史表中的插入或删除记录。

以下是一个示例触发器,用于阻止历史表中的插入或删除记录:

代码语言:javascript
复制
CREATE TRIGGER trg_PreventHistoryInsertDelete
ON YourTemporalTable
AFTER UPDATE, DELETE
AS
BEGIN
  IF EXISTS(SELECT 1 FROM inserted) OR EXISTS(SELECT 1 FROM deleted)
  BEGIN
    RAISERROR('Updates and deletes in the current table are not allowed to affect the history table.', 16, 1);
    ROLLBACK TRANSACTION;
  END
END;

方法三:使用事务隔离级别

你还可以通过设置适当的事务隔离级别来控制时态表的更新和删除操作。例如,你可以使用SERIALIZABLE隔离级别来确保事务内的更新和删除操作不会影响历史表。

代码语言:javascript
复制
BEGIN TRANSACTION;

SET TRANSACTION ISOLATION LEVEL SERIALIZABLE;

-- 更新或删除当前表中的记录
UPDATE YourTemporalTable SET Column1 = Value1 WHERE Condition;
DELETE FROM YourTemporalTable WHERE Condition;

COMMIT TRANSACTION;

总之,虽然时态表默认为事务内的更新和删除操作保留删除历史记录,但你可以通过使用系统版本控制开关、触发器或事务隔离级别来禁用这种行为。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

论亚马逊QLDB与腾讯TDSQL对历史数据管理和计算

2.2.2 TDSQL数据时态 时态,即时态数据库概念中时态。 依据时态数据库理论,参考SQL:2011时态相关准则,TDSQL提供有效时间和事务时间支持。...TDSQL全时态数据模型是基于关系数据模型,并包含数据状态和时态两个概念,具备丰富计算能力。作为全时态数据模型子集,大量现行关系型数据库应用可以轻松迁移。...图4-2(引用自ref[6])和图4-3(引用自ref[6])分别为QLDB更新和删除操作,类似的,用户使用SQL-like语句,更新和删除过程先追加写Journal,随后更新Current和History...4.2.1 时态操作 TDSQL提供有效时间和事务时间两种时态语义和操作。 有效时间操作: 1.有效时间点查询、有效时间段查询; 2.有效时间区间更新、有效时间区间删除。...TDSQL全时态数据库功能是完全适用关系型数据库SQL操作,没有自定义一套新接口,方便了用户使用。 TDSQL还在时态维度上提供有效时间和事务时间操作,在状态维度上提供全态数据获取。

1.4K40

VLDB 2019 | 揭秘腾讯TDSQL全时态数据库系统

-11-08 10:12:43 2 时态数据 企业微信截图_20190829183741.png 三 系统简介 结合TDSQL系统特点,研究团队提出并实现了一个轻量且高效时态数据库系统,该系统可以在保留原有...对于历史数据,系统利用k-v存储特性,可以根据时间条件快速定位到所需数据版本,具备了较好时态查询性能,且在SQL语句写法上方便用户直接使用SQL语句进行查询。...除了在SQL:2011中定义有效/事务时间属性外,本模型通过新引入事务ID属性描述时间。 MIN_ID与创建记录事务相对应,MAX_ID对应于删除/更新记录事务。...事务ID能够识别在同一事务中插入/更新/删除所有记录,从而实现由于业务逻辑破坏数据修复。 2....可以查询到对于历史上任意一个时间段数据变化情况,如新插入数据、连续被更新数据、以及被删除数据。因此可以追踪数据历史轨迹,并能方便在增量数据基础上进行多表连接增量计算。 2.

10.2K2823
  • 【犀牛鸟·硬核】 VLDB 2019 | 揭秘腾讯与中国人民大学最新联合研究成果TDSQL全时态数据库系统

    时态数据 系统简介 03 结合TDSQL系统特点,研究团队提出并实现了一个轻量且高效时态数据库系统,该系统可以在保留原有TDSQL强劲OLTP处理性能同时,通过巧妙系统设计,提供了内建时态数据管理能力...对于历史数据,系统利用k-v存储特性,可以根据时间条件快速定位到所需数据版本,具备了较好时态查询性能,且在SQL语句写法上方便用户直接使用SQL语句进行查询。...除了在SQL:2011中定义有效/事务时间属性外,本模型通过新引入事务ID属性描述时间。MIN_ID与创建记录事务相对应,MAX_ID对应于删除/更新记录事务。...事务ID能够识别在同一事务中插入/更新/删除所有记录,从而实现由于业务逻辑破坏数据修复。...可以查询到对于历史上任意一个时间段数据变化情况,如新插入数据、连续被更新数据、以及被删除数据。因此可以追踪数据历史轨迹,并能方便在增量数据基础上进行多表连接增量计算。 2.

    75630

    揭秘腾讯全时态数据库系统,又一论文被数据库顶会VLDB收录

    如果通过传统数据库(RDBMS)中普通关系进行账户余额管理(如图1所示),账户余额变动不会被维护,因而上层应用需要通过日志等形式来额外记录余额每次变动,这会大大提高应用复杂度;而采用如表2所示时态数据...系统简介 结合TDSQL系统特点,研究团队提出并实现了一个轻量且高效时态数据库系统,该系统可以在保留原有TDSQL强劲OLTP处理性能同时,通过巧妙系统设计,提供了内建时态数据管理能力。...除了在SQL:2011中定义有效/事务时间属性外,本模型通过新引入事务ID属性描述时间。MIN_ID与创建记录事务相对应,MAX_ID对应于删除/更新记录事务。...事务ID能够识别在同一事务中插入/更新/删除所有记录,从而实现由于业务逻辑破坏数据修复。...可以查询到对于历史上任意一个时间段数据变化情况,如新插入数据、连续被更新数据、以及被删除数据。因此可以追踪数据历史轨迹,并能方便在增量数据基础上进行多表连接增量计算。 2.

    78640

    VLDB 2019 | 揭秘腾讯TDSQL全时态数据库系统

    如果通过传统数据库(RDBMS)中普通关系进行账户余额管理(如图1所示),账户余额变动不会被维护,因而上层应用需要通过日志等形式来额外记录余额每次变动,这会大大提高应用复杂度;而采用如表2所示时态数据...系统简介 结合TDSQL系统特点,研究团队提出并实现了一个轻量且高效时态数据库系统,该系统可以在保留原有TDSQL强劲OLTP处理性能同时,通过巧妙系统设计,提供了内建时态数据管理能力(如图...除了在SQL:2011中定义有效/事务时间属性外,本模型通过新引入事务ID属性描述时间。MIN_ID与创建记录事务相对应,MAX_ID对应于删除/更新记录事务。...事务ID能够识别在同一事务中插入/更新/删除所有记录,从而实现由于业务逻辑破坏数据修复。...可以查询到对于历史上任意一个时间段数据变化情况,如新插入数据、连续被更新数据、以及被删除数据。因此可以追踪数据历史轨迹,并能方便在增量数据基础上进行多表连接增量计算。

    90150

    【ASP.NET Core 基础知识】--数据库连接--使用Entity Framework Core进行数据库访问

    数据库提供程序负责以下任务: 数据库连接: 提供程序必须提供连接到数据库方法,并处理连接字符串。 数据操作: 提供程序需要实现与数据库进行交互必要命令,包括查询、插入、更新和删除操作。...,同时保留现有的数据。...Script-Migration 迁移历史记录:可以在数据库中查看迁移历史记录,通常存储在 __EFMigrationsHistory 中。...批量操作:使用批处理技术,比如批量插入、更新和删除,以减少数据库交互次数。 使用内存缓存:对于那些不经常变化数据,可以使用内存缓存来避免不必要DB查询。...MyDbContext()) { // 执行数据库操作,例如查询数据 var blog = context.Blogs.FirstOrDefault(); // 或者添加、更新和删除数据

    44800

    TDSQL 全时态数据库系统-理念与愿景

    如计算任意时间段数据,按时间段在物理上割裂了数据按时间逻辑连续特性,需要指定若干个特定才能进行计算。 3.  ...节点失效通过ZooKeeper进行管理[2],并提供了两种节点级、Server级数据恢复技术。跨节点事务通过XA接口和2PC技术实现分布式事务对数据操作原子性、一致性。...图1中TSI部分,体现了T-TDSQL全时态数据库在存储层面对于TDSQL创新与扩展,通过统一数据管理接口,以满足对海量历史态数据进行存储、管理。历史态数据计算,则体现在图1SQL计算层。...实现了MVCC技术数据库,能在有限时长时刻保存尚被活跃事务使用旧版本数据(过渡态数据)。...当历史态数据可读取时,基于历史上任何一个时间点T,可求出此时节点之后任意一个时间段相对于时间点T数据变化情况,如新插入数据、连续被更新数据、以及被删除数据,并能识别出针对数据操作动作是插入

    1.3K20

    【数据库04】中级开发需要掌握哪些SQL进阶玩法

    :上篇文章我们把数据库增删改查讲解透透了,这篇文章我们将学习具有复杂形式SQL查询,视图定义,事务,完整性约束等。...只保留连接关键字之前关系元组。 右外连接。只保留连接关键字之后关系元组。 全外连接。保留出现在两个关系中元组。 相比较而言,我们之前学习保留未匹配元组连接运算被称为连接运算。...SQL标准规定当一条SQL语句被执行时,就隐式开始了一个事务。下列SQL语句之一会结束该事务。 commit work,事务提交。一个事务提交后就在数据库中称为了永久性,会自动开始一个新事务。...只有诸如SQL Server某些数据库支持上述语法。...可以通过set role rolename来指定当前会话角色,在当前会话角色不为情况下,我们可以在授权时以角色身份授权而不是用户身份授权。

    1.7K20

    为数据赋能:腾讯TDSQL分布式金融级数据库前沿技术

    著有《数据库事务处理艺术:事务管理和并发访问控制》、《数据库查询优化器艺术:原理解析与SQL性能优化》,广受好评。...如计算任意时间段数据,按时间段在物理上割裂了数据按时间逻辑连续特性,需要指定若干个特定才能进行计算。 3....数据具有其时态属性,即在何时数据库系统进行了什么样操作。某项操作在数据库系统被封装为事务,而事务具有原子性。因此,我们采用了事务标志来标识一个数据事务时态属性。...查询时间段内插入数据,用于数据统计和追踪,如统计新开账户、异常记录何时被添加等。 查询时间段删除数据,在安全保障和数据统计等方面作用显著,如恢复误删数据、统计销户人数等。...[1]不受时限、任意对账:对账SQL语句中指定快照差即可,FROM子句中涉及名等不发生变化,即对账使用数据源没有改变,故不影响对账流程。

    10.3K120

    Hibernate框架学习之二

    在DB2、MySQL、MS SQL Server、Sybase和HypersonicSQL数据库中可以使用该生成器,该生成器要求在数据库中把主键定义为自增长类型。适用于代理主键。...Tips:有时称为四种状态,还有删除态,它状态特征为:有OID,和Session有关系,同时已经调用了删除方法,即将从数据库中把记录删除,但是事务还没有提交,此时对象状态是删除态。...: 持久态转换为瞬时态:执行 Session delete( )方法,需要注意是被删除持久化对象,不 建议再次使用。...4.事务隔离级别   为了避免事务并发问题发生,在标准SQL规范中,定义了4个事务隔离级别,不同隔离级别对事务处理不同。...● executeUpdate( ) 方法:该方法是 Hibernate3新特寺性,它支持HQL语句新和删除操作。

    81850

    Python | Python学习之mysql交互详解

    null 表示不为空 -- primary key 表示为主键 -- defaul 表示默认值 删除:drop table; 修改结构: 添加字段:alter table 名 add 列名 类型...like '咸%' or name like '%鱼'; -- 查询以咸字开头或以鱼字结尾内容 范围查询 in 表示在一个非连续范围 no in 表示不在一个非连续范围 between ....* from 1 inner/left/right join 2 on 1.列 = 2.列 其中: inner join(连接查询):查询结果为两个匹配到数据 right join(...:show index from 名; 删除索引:drop index 索引名称 on 名; 注意事项 建立太多索引将会影响更新和插入速度,因为它需要同样更新每个索引文件。...对于一个经常需要更新和插入表格,就没有必要为一个很少使用where字句单独建立索引了,对于比较小,排序开销不会很大,也没有必要建立另外索引。 建立索引会占用磁盘空间。

    1.2K21

    Flink SQL JOIN 介绍与原理简析

    其中 INNER JOIN 只会下发 Upsert 数据流(即只有更新和插入,没有删除操作),而 LEFT 和 RIGHT JOIN 则会下发更多类型 Changelog 数据流(包含了插入、更新、删除等各种类型...对于各类数据流区别和转化,请参见 Flink 官方文档:动态。 常规 JOIN 运行时需要保留和右状态,且随着时间推移,状态会无限增长,最终可能导致作业 OOM 崩溃或异常缓慢。...时态 JOIN(Temporal JOIN) 时态 JOIN 是一类特殊关联操作:本文前半部分介绍各种 JOIN 类型都是基于最新数据进行关联,而 时态 JOIN 则可以根据左表记录中时间戳...下面是时态 JOIN 一个 SQL 示例程序,它语法特点是 FOR SYSTEM_TIME AS OF 语句: CREATE TABLE `Order` ( id INT,...它只支持 Append 流,且总是保留左右关联状态,因此存在一定内存压力。

    6.7K32

    Flink SQL JOIN 介绍与原理简析

    其中 INNER JOIN 只会下发 Upsert 数据流(即只有更新和插入,没有删除操作),而 LEFT 和 RIGHT JOIN 则会下发更多类型 Changelog 数据流(包含了插入、更新、删除等各种类型...对于各类数据流区别和转化,请参见 Flink 官方文档:动态。 常规 JOIN 运行时需要保留和右状态,且随着时间推移,状态会无限增长,最终可能导致作业 OOM 崩溃或异常缓慢。...时态 JOIN(Temporal JOIN) 时态 JOIN 是一类特殊关联操作:本文前半部分介绍各种 JOIN 类型都是基于最新数据进行关联,而 时态 JOIN 则可以根据左表记录中时间戳...下面是时态 JOIN 一个 SQL 示例程序,它语法特点是 FOR SYSTEM_TIME AS OF 语句:...它只支持 Append 流,且总是保留左右关联状态,因此存在一定内存压力。

    1K10

    一文读懂如何处理缓慢变化维度(SCD)

    多年来,数据处理程序一直面临着处理缓慢变化维度而不丢失其以前历史记录以及保留对事实关系引用挑战。Kimball方法提出了几种有效处理缓慢变化维度(简称SCD)方法。...现实情况是,一旦选择了特定SCD方法,在数据仓库中实施它就相对容易。对SQL和ACID事务支持使其易于处理。 不幸是,在数据湖中实现相同情况却是另一回事。...DeltaLake维护按时间顺序排列更改历史记录,包括插入、更新和删除。在上面的示例中,版本0是在创建customer_silver_scd1silver层时生成。...需要注意是,维护维度应用程序需要以这样方式进行编码,即在一个事务中执行当前版本新记录添加和先前版本到期。此外,每个针对维度查询都需要过滤status=Current。...与SCDType2相比,SCDType3相对容易实现,历史记录仅包括当前版本和以前版本。 我们现在将了解如何使用delta框架来实现SCDType3。

    61422

    TDSQL 全时态数据库系统 -- 典型案例

    闪回删除:闪回删除可以将一个已经被Drop还原。相应索引也会被还原(索引还原是通过重建方式进行)。 3. 闪回归档:闪回数据归档可使具有回退到过去任何时间点。...地点(何地Where):数据项存储位置。 4. 时间(何时When):双时态属性。 5. 人员(何人Who):用户和数据项进行关联,在事务属性项上建立与用户UID标识关联。...历史态数据存储,全时态数据中带有事务时间,基于这两点,可以分析数据演变情况和某个时间点事务发生情况,从而推演数据库在时间轴上演进情况。...数据分析 基于用户数据历史变迁进行用户画像多维度分析,在历史态数据支持下,可方便进行用户深度分析;在双时态支持下,可以方便根据时间变迁和事务执行情况进行数据分析工作。...ICDE 2006: 35 [1]不受时限、任意对账:对账SQL语句中指定快照差即可,FROM子句中涉及名等不发生变化,即对账使用数据源没有改变,故不影响对账流程。

    9.5K2018

    【MySQL】MySQL事务

    理解事务 事务操作 事务特性 事务隔离级别  事务隔离级别-操作  概念 数据库存储引擎是数据库底层软件组织,数据库管理系统(DBMS)使用数据引擎进行创建、查 询、更新和删除数据。...用户可以 根据不同需求为数据选择不同存储引擎 可以使用 SHOW ENGINES 命令 可以查看Mysql 所有执行引擎我们 可以到 默认执行引擎是innoDB 支持事务,行级锁定和外键。...事务处理可以用来维护数据库完整性,保证成批 SQL 语句要么全部执行,要么全 部不执行。...Transaction 失败结束,将所有的DML语句操作历史记录全部清空 命 令:ROLLBACK 之前所有SQL操作其实也有事务,只是MySQL自动帮我们完成,每执行一条SQL时MySQL就...如果一个事务正在操作数 据被另一个事务修改或删除了,最后执行结果可能无法达到预期。如果没有隔离性还会导致其他 问题。

    3.6K20

    怎么避免MYSQL误删除避免混淆开发环境DB和生产环境DB用事务保护使用安全更新模式对DROP和TRUNCATE慎之又慎最终招数最终的话

    即便如此,小伙伴手心里已经全是汗了~~ 由此想到,生产环境下,总会有DBA和生产库打交道,其中也免不了更新和删除。借此机会总结一下一些常规招数。...郁闷是,有时候粘贴会顺便粘贴SQL最后回车,这样一贴就执行了。稍有不慎就有大祸。 这里最重要就是用很显眼方式让开发环境客户端和生产环境客户端看起来不一样。...用事务保护 在更新数据和删除数据时,要特别留意比如忘记写where或者写错了where情况。所以始终要预先确定要更新/删除行有多少条。...即便是在开发环境,做更新和删除时,最好也要用这一招,不要怕麻烦。如果管不住自己手,可以考虑—— 使用安全更新模式 mysql提供一个参数--safe-updates启用安全更新模式。...而是要保证 总是把要删名改了 运行一段时间后,程序没有问题,再真的删 ALTER TABLE tbl_name RENAME TO tal_name_tobedel 删除数据库时,因为MySQL

    1.3K130

    【官方详解】Zabbix, 时间序列数据和TimescaleDB

    因此,在最高级别,监控系统有三个主要方面(以上均有提到)-新数据采集与关联SQL插入操作、数据读取与关联SQL选择查询、数据删除SQL删除操作。...,将结果组合后返回给客户端 对于插入、更新和删除语句,引擎还必须更新相应索引。...大多数SQL选择查询将使用带有时间列WHERE、GROUP BY或 ORDER BY子句 时间序列数据保留策略通常都是批量删除, 而不是删除单个记录 很明显,传统SQL数据库并不适合存储此类数据...我们喜欢构建新功能,而不是与外来APIs作“斗争” 那么,是否有办法在不丧失SQL灵活性情况下利用时间序列数据库呢?...在 TSDB 中, 你只需发出 drop_chunks() 命令, 该命令计算在给定时间范围必须删除块。如果你需要从本机 PG 分区中删除特定范围值, 则需要你自己去计算命名关系范围。

    1.9K20

    数据库面试题汇总

    ,提高系统性能 索引降低了插入、删除、修改等维护任务速度 索引需要占物理和数据空间 事务 事务定义 并发控制基本单位。...事务性质 原子性、一致性、隔离性、持久性 drop、delete与truncate 相同点 都表示删除 不同点 delete和truncate只删除数据不删除结构 速度,一般来说: drop...场景使用 不再需要一张时候,用drop 想删除部分数据行时候,用delete,并且带上where子句 保留删除所有数据时候用truncate 超健、候选键、主键、外键 超健 在关系中能唯一标识元组属性集称为关系模式超键...对视图修改不影响基本。它使得我们获取数据容易,相比多表查询。...方式来进行锁定 实现方式:使用version版本或者时间戳 连接方式 类型 连接 自连接 外连接 交叉连接 连接 只有两个元素表相匹配才能在结果集中显示 外连接 左外连接:左边为驱动,驱动数据全部显示

    1.9K21

    Zabbix MySQL MariaDB 数据库分

    (zabbix_server.conf配置文件两个参数进行历史记录数据删除:间隔多久删除一次,默认单位小时HousekeepingFrequency=1,一次删除多少数据,默认单位行MaxHousekeeperDelete...趋势数据 趋势数据趋势方式是对应监控项目的历史数据在一个小时平均值、最大值、最小值以及这一个小时该监控项目所采集到数据个数。...注意 如果监控项目的“保留历史数据(天)”配置项被设置成0时,则数据库历史中仅保留该监控项目所采集最后一条数据,其它历史数据将数据将不会被会保留。...例如,如果已配置保留 7 天历史记录,则分区将在第 8 天开始删除历史记录。之后,每天删除一张历史,使数据库始终有7天历史数据。...趋势数据也是如此,如果配置保留 365 天趋势数据,则只有在 365 天后才会开始删除趋势

    2K10
    领券