在一个事务 SQL 中删除和插入

2024-01-31

我只是想问封装到事务时是否总是第一个查询被执行?例如我有50万条记录要删除,50万条记录要插入,是否有可能锁定? 实际上我已经测试了这个查询并且它工作正常,但我想确定我的假设是否正确。

注意:这将删除并插入相同的记录,并可能更新其他列。

BEGIN TRAN;
    DELETE FROM OUTPUT TABLE WHERE ID = (1,2,3,4 etc)
    INSERT INTO OUTPUT TABLE Values (1,2,3,4 etc) 
COMMIT TRAN;

在事务中,所有写锁(为修改而获取的所有锁)都必须遵守严格的两相锁定 http://en.wikipedia.org/wiki/Two-phase_locking规则。后果之一是在事务中获取的写 (X) 锁在事务提交之前无法释放。所以是的,DELETE 和 INSERT 将按顺序执行,并且在执行 INSERT 时将保留 DELETE 期间获取的所有锁。

请记住,在事务中删除 500k 行会将锁升级为一个表锁,请参阅锁升级 http://technet.microsoft.com/en-us/library/ms184286(v=sql.105).aspx.

在单个事务中删除 500k 行并插入 500k 行虽然可能是正确的,但却是一个坏主意。如果可能的话,您应该避免如此大的工作量和长时间的交易。长事务将日志固定到位,产生阻塞和争用,增加恢复和数据库启动时间,增加 SQL Server 资源消耗(锁需要内存)。

您应该考虑小批量执行操作(可能一次 10000 行),使用MERGE http://msdn.microsoft.com/en-us/library/bb510625.aspx而不是 DELETE/INSERT(如果可能),最后但并非最不重要的一点是,考虑分区滑动窗口 实施,参见如何在分区表中实现自动滑动窗口 http://technet.microsoft.com/en-us/library/aa964122(v=sql.90).aspx.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在一个事务 SQL 中删除和插入 的相关文章

  • 从另一台计算机连接到 SQL Server

    我正在使用 C 连接到网络上另一台计算机上的 SQL Server 但收到一条异常消息 用户 用户名 登录失败 但是服务器日志状态表明使用 Windows 身份验证的用户连接成功 我的连接字符串是 Data Source ipaddress
  • T-SQL 问题:查询 XML

    任何人都可以告诉我如何从这些数据生成 DATA Key ParentKey 5 NULL 25 5 33 25 26 5 27 5 34 27 28 5 29 5 这个 XML 结果 RESULTS
  • SQL Server - 比较 2 个表中同一列中的数据,而不检查是否相等

    我之前问过这个问题here https stackoverflow com q 51865261 1693085 但答案实际上并不是我想要的 假设我的 SQL Server 2012 数据库中有以下两个表 Tbl1 ID Col1 Col2
  • 嵌入定义绑定变量的 Oracle PL/SQL 代码的 Shell 脚本

    如果我运行下面的脚本 我会收到错误SP2 0552 未声明绑定变量 OUTRES 那么 如何定义绑定变量OUTRES以及在哪里定义呢 usr bin bash sqlplus s scott tiger lt lt EOF declare
  • MYSQL 中当前行上日期之前(并包括该日期)的所有行的总和

    重要的是要知道在查询期间日期是未知的 因此我不能只硬编码 WHERE 子句 这是我的桌子 Date ID Customer Order Count 20150101 Jones 6 20150102 Jones 4 20150103 Jon
  • 使用 dtexec 运行 SSIS 包

    我正在使用 dtexec 运行 SSIS 包 该软件包在我的系统上的 BIDS 中运行良好 当我创建 SQL Server 代理作业以按计划运行包时 包运行步骤被安排为 T SQL 任务 而不是 SSIS 包 该作业没有报告错误 但它甚至没
  • SQL最近的命令?微软SQL

    我只是编写一个查询来查看我的客户数据库并列出他们下了多少订单等 我正在努力添加到此查询中的是只显示该电子邮件的最新 OrderID 有任何想法吗 这是我的查询 select top 1000 BuyerEMail COUNT HowMany
  • INSERT 失败,因为以下 SET 选项设置不正确:“QUOTED_IDENTIFIER”

    在执行存储过程时 我们有时会收到以下消息 之后无需任何更改 删除并重新执行存储过程 它就可以正常工作 DBCORE INSERT 失败 因为以下 SET 选项设置不正确 QUOTED IDENTIFIER 验证 SET 选项是否正确用于索引
  • SQL查询中的Python列表作为参数[重复]

    这个问题在这里已经有答案了 我有一个 Python 列表 比如说 l 1 5 8 我想编写一个 SQL 查询来获取列表中所有元素的数据 例如 select name from students where id IN THE LIST l
  • SQL Server - 即使在回滚的情况下如何确保标识字段正确增加

    在 SQL Server 中 如果涉及插入新行的事务被回滚 则标识字段中的数字将被跳过 例如 如果Foos表是99 然后我们尝试插入一个新的Foo记录但回滚 然后 ID 100 被 用完 下一个Foo行编号为 101 有什么方法可以改变这种
  • 如何每行输出 7 条记录,一周中的每一天输出 1 条记录?

    试图在这里节省大量的数据输入 我目前有以下输出 CONTID DESCR 001 Area 1 001 Area 2 001 Area 3 我想要做的是为每个 DESCR 区域 输出 7 条记录 一周中的每一天输出 1 条记录 相应地为 0
  • 查看oracle有关主/外键约束的元数据

    哪个表包含有关约束的详细信息 例如外键引用的表 表 all cons columns all constraints 仅包含约束的名称 这不是很有帮助 我目前正在使用 dbms metadata get ddl 但它不适用于所有数据库 Th
  • 如何比较两个日期以查找 SQL Server 2005 中的时间差,日期操作

    我有两列 job start job end 2011 11 02 12 20 37 247 2011 11 02 13 35 14 613 如何使用 T SQL 查找作业开始和作业结束之间经过的原始时间量 我试过这个 select job
  • 子查询在多项选择时返回超过 1 个值的 SQL 错误

    我想要一个临时表 它将使用 select 语句插入值 但每次我运行查询时 总是出现错误 子查询返回超过 1 个值 当查询跟随 gt 或子查询用作表达式时 不允许这样做 该语句已终止 0 行受影响 这很奇怪 因为代码中似乎没有错误 但如果有的
  • Rails 5.2.2(活动记录)WITH 语句

    我正在使用 Rails 5 2 2 并且有一个使用 WITH 语句的复杂查询 我需要使用左外连接创建该语句 我该如何做WITH活动记录中的语句 我的 TOTAL PROFILES 由查询对象驱动 并且会发生变化 而其余部分将始终保持不变 所
  • 分区表查询仍然扫描所有分区

    我有一个包含超过十亿条记录的表 为了提高性能 我将其分区为30个分区 最常见的查询有 id 在他们的 where 子句中 所以我决定对表进行分区id column 基本上 分区是这样创建的 CREATE TABLE foo 0 CHECK
  • 将语句插入 SQL Server 数据库

    最近几天我试图找到这个错误 但没有成功 我正在尝试在数据库中插入一个新行 一切都很顺利 没有错误 也没有程序崩溃 My INSERT声明如下 INSERT INTO Polozaj Znesek Uporabnik Cas Kupec Po
  • 获取每月第二个星期二的日期

    有没有办法使用 T SQL 语法找出每月第二个星期二的日期 例如 三月是十二号 四月是九号 您可以通过此方法查找 2013 年所有 第二个星期二 select dateadd day 8 datediff day 1 dateadd mon
  • 使用 Athena 从 AWS WAF 日志中的规则组列表获取终止规则

    我跟着这些说明 https docs aws amazon com athena latest ug waf logs html将我的 AWS WAF 数据放入 Athena 表中 我想查询数据以查找具有 BLOCK 操作的最新请求 此查询
  • 我可以采取哪些措施来提高 SQL Server 中纯用户定义函数的性能?

    我制作了一个简单但计算相对复杂的 UDF 用于查询很少更改的表 在典型用法中 该函数会在一个非常小的参数域上从 WHERE 子句中多次调用 如何才能更快地使用 UDF 我的想法是应该有某种方式告诉 SQL Server 我的函数使用相同的参

随机推荐

  • 为 Twilio-Whatsapp 电话号码上的传入消息设置 Webhook

    我们有一个支持 Whatsapp 的 Twilio 电话号码 当尝试以编程方式设置传入消息的 Webhook 时 Webhook 设置正确 但消息未通过 Whatsapp 电话号码的 Webhook 似乎位于与普通电话号码不同的位置 要手动
  • 范围内的字符类 - vim

    鉴于我有以下字符串 This is a test string string string 并尝试执行以下替换 s w substitute g 它不会出现错误 未找到模式 当我使用时 s a zA Z substitute g 有用 有没
  • 什么情况下fgetcsv返回false?

    The 文档 http php net manual en function fgetcsv php says 如果提供了无效句柄 则 fgetcsv 返回 NULL 如果出现其他错误 包括文件结尾 则返回 FALSE 除了文件结尾之外 什
  • 访问 static constexpr std::array 而不使用类外定义

    我有一个定义一些数组的类 点 hpp class Points public static constexpr std array lt double 1 gt a1 0 0 static constexpr std array lt do
  • 如何在java中生成所有可能的64位随机值?

    是否有JavaSecureRandom nextLong 返回所有可能的值 因为它继承自Random它只使用 48 位 如果没有 我仍然可以在 Java 中通过修改 Random 类来实现它吗 如何做到这一点 我只想使用一个全随机长数生成器
  • 无需刷新页面即可启用地理位置?

    目前 我们必须刷新网页 实际上PhoneGap应用程序 如果 GPS 关闭并且 通知用户后 然后打开 我们怎样才能更新GeoLocation状态无需刷新页面 应用程序 为什么不简单地使用 setInterval 每隔几秒检查一次支持
  • 在 Heroku 的生产中使用 ENV 文件

    我的配置中有以下行生产 rb环境文件 按照说明本文 https devcenter heroku com articles memcachedcloud using memcached from ruby config cache stor
  • 抽象类的复制构造函数

    我有一个名为的抽象类AClass 在同一个包中我有AnotherClass 其中我有一个ArrayList of AClass对象 在复制构造函数中AnotherClass我需要复制一份AClass里面的物体ArrayList 问题 我无法
  • 有没有用于可视化 Node.js 中模块依赖关系的库?

    作为 Node js 应用程序主要重构的一部分 走向 DDD 我正在寻找一个库 通过检查代码能够可视化不同节点模块之间的模块依赖关系 通过 要求 它们 以表格格式可视化很好 我不需要花哨的图表 有没有 Node 库 如果您也可以接受一些花哨
  • Java - 线程、Swing 和 ServerSocket

    我知道我知道 已经有一百万个关于这个问题的问题和答案无处不在 有大量关于它的非常详细的文章 以及几种类型的示例 我花了几个小时阅读有关它的内容 但这并没有解决问题 我问这个的原因是因为我仍然不明白我需要做什么 因为我的代码仍然无法工作 我了
  • Powershell 参数路径的值为 NULL

    我开发了一个 PS1 文件 它将负责基于服务器列表应用 SQL Server 补丁 因此 它将读取一个文本文件 其中包含我需要修补并应用修补程序的所有服务器 我决定使用 PARAM 作为 源文件夹 我将在其中获取服务器列表并记录输出 目标文
  • 替换 CSV 第一列中的数据

    我有一个包含许多列的 CSV 第一列中的数据是日期 但格式错误 我可以仅选择第一列并重新格式化日期 但我无法弄清楚如何将新数据保存到现有 CSV 而不覆盖所有其他数据 File File csv Content Get Content Fi
  • 新的Google Play控制台:在哪里上传mapping.txt?

    我不知道在新的 Google Play 管理中心中将mapping txt 上传到哪里 要上传反混淆 打开 Play 管理中心 选择一个应用程序 在左侧菜单中 选择 发布 gt 应用程序包资源管理器 选择 下载 选项卡 然后向下滚动到 资产
  • 将单元格中的值范围转换为逗号分隔列表

    我可以在单元格 B1 中使用一个公式来查看 A1 并创建一个基于逗号的列表吗 所以下面我可以输入 A1 B1是一个公式 这可能吗 我会让 A1 始终遵循与 XXX XXX 范围相同的格式 TABLE A Input B Result 1 1
  • 网站图标-MVC3 ASP.NET

    favicon ico 需要什么 我正在尝试使用 MVC 错误处理 但它抱怨文件丢失 如何摆脱此错误 Thanks 前往RegisterRoutes的方法全局 asax cs文件 并将其添加为第一行之一 routes IgnoreRoute
  • MATLAB脚本代码和函数代码在同一个文件中? [复制]

    这个问题在这里已经有答案了 可能的重复 在 MATLAB 中 我可以在同一个文件中包含脚本和函数定义吗 https stackoverflow com questions 5363397 in matlab can i have a scr
  • 通过网络(FTP、HTTP、RSync 等)传输文件的最快方法是什么[关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我试图找出通过网络在两个系统之间传输大量数据的最佳方法 我目前正在研究 FTP HTTP 或 RSync 我想知道哪一个最快 我在网上寻找
  • 获取 SQLalchemy Instrumentedattribute 的值

    我怎样才能获取a的值InstrumentedAttributeSQLalchemy 中的对象 Pdb ResultLine item reference 1
  • 如何删除所有神秘的“index on”和“WIP on”提交?

    我刚刚被要求修复我的应用程序中的一个错误 我收藏了我当前的工作并查看了我的最新版本标签 我立即注意到这是一个错误 因为 Git 消息告诉我我的提交不会被保存 所以我检查了master反而 但在我这样做之前 我已经打开了我的藏品 重新藏起来的
  • 在一个事务 SQL 中删除和插入

    我只是想问封装到事务时是否总是第一个查询被执行 例如我有50万条记录要删除 50万条记录要插入 是否有可能锁定 实际上我已经测试了这个查询并且它工作正常 但我想确定我的假设是否正确 注意 这将删除并插入相同的记录 并可能更新其他列 BEGI