首页
学习
活动
专区
工具
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全时态数据库系统

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

    76830

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

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

    78740

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

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

    91050

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

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

    62000

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

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

    1.5K20

    【数据库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语句的更新和删除操作。

    82650

    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

    hhdb数据库介绍(10-37)

    管理平台在保留时间内支持可视化数据闪回操作,另外还包括查看可还原数据列表、还原(闪回)数据、删除数据、查看历史记录等功能。...使用前提使用表回收站功能需要满足如下前提:当前用户拥有表回收站菜单权限当前计算节点参数“被删除表保留时长”不为0在服务端(默认3323)执行DROP、TRUNCATE、DELETE不带WHERE条件(自动提交...表回收站页面显示服务端(默认3323)执行3种操作后进入回收站的临时表可通过“逻辑库”、“原表名称”、“执行语句”来筛选查看表回收站记录超过表保留时间后,回收站表自动删除,且不记录至历史记录回收站配置(...表回收站的表超过设置时长后将完全删除该表且无法通过回收站恢复。选择回收站表清理窗口时间,此段时间内会对已超过保留时长的表进行自动的清理。选择时间的区间为:00:00到24:00(每半个小时一个选项)。...选择并勾选例外逻辑库对象:勾选的的逻辑库对象表示为:执行删除表的SQL语句时,该例外的逻辑库对象中的表会直接删除,不会进入回收站,无法通过回收站恢复。

    9110

    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 流,且总是保留左右表的关联状态,因此存在一定的内存压力。

    7.2K32

    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。

    68622

    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

    一个小时学会MySQL数据库

    、修改列 5.5.3、删除列 5.5.4、重命名表 5.5.5、删除表 5.5.6、删除数据库 5.5.7、一千行MySQL笔记 5.5.8、常用的SQL 六、下载程序、帮助、视频 随着移动互联网的结束与人工智能的到来大数据变成越来越重要...代表:Oracle、SQL Server、MySQL 1.3.2、非关系型数据库 随着时代的进步与发展的需要,非关系型数据库应运而生。...,但是各个表中内容更清晰了,重复的数据少了,更新和维护变的更容易了,哪么如何平衡这种矛盾呢?...,支持Commit 和Rollback 等其他事务特性 Memory 所有数据置于内存的存储引擎,拥有极高的插入,更新和查询效率。...表 table:数据是保存在表内,保存在一个表内的数据,应该具有相同的数据格式 行:行用于记录数据 记录:行内的数据 列:列用于规定数据格式 字段:数据的某个列 ? SQL:用来管理数据的语言。

    1.8K30
    领券