首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >为什么过程中的单个插入不符合显式事务的条件?

为什么过程中的单个插入不符合显式事务的条件?
EN

Stack Overflow用户
提问于 2015-07-30 04:56:29
回答 2查看 33关注 0票数 0

在这种情况下,我希望在存储过程中实现单个INSERT,以确保具有事务形式的锁定机制。

这个文章

如果您的过程不执行任何更新,或者只有一个INSERT/UPDATE/DELETE/MERGE语句,则通常根本没有显式事务。

这是否意味着存储过程是无用的?

提前谢谢。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-07-30 05:08:35

我想你误解了它的意思。通常有一个关键字。执行单个INSERT语句时,操作自动为原子操作。即使您要插入1000行,它们要么全部插入,要么不插入。从某种意义上说,那里有一个隐含的事务。这个词通常很重要,因为虽然这个隐式事务是原子的,但是您不能自己回滚它。例如,您可能正在做这样的事情(人为的例子):

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
INSERT INTO MyLog (Record)
SELECT Record FROM OldLog

If (@@ROWCOUNT < 500)
    ROLLBACK

您不能这样做,因为没有显式的事务。如果您将其包装在一个BEGIN TRANSACTION中,现在就可以了。

但是,通常,当您有多个要成为原子语句的语句时,可以使用显式事务。例如,您要插入3个不同的表,需要它们全部成功或全部失败。通过拥有一个显式事务,您可以ROLLBACK,这样您就不会以Table1被更新而Table2和Table3没有更新的状态结束。

所以我同意这个说法,通常当您有一个INSERT时,您不需要一个显式的事务,但是可能会出现一些奇怪的情况,您需要一个事务。

票数 1
EN

Stack Overflow用户

发布于 2015-07-30 05:00:56

如果没有为插入指定事务,SQL将假设您不需要事务,并在proc结束后释放锁。

因此,只需使用显式事务来确定,例如:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
BEGIN TRAN
INSERT ...
COMMIT TRAN

或者,使用相同的连接,显式启动事务,调用proc,然后在关闭连接之前显式提交事务。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31724410

复制
相关文章
MySQL显式事务与隐式事务
显式事务是指在应用程序中明确指定事务的开始和结束,使用BEGIN、COMMIT和ROLLBACK语句来控制事务的执行。
堕落飞鸟
2023/05/11
1.2K0
并发编程之显式条件
我们之前介绍 synchronized 关键字语义的时候说过,synchronized 虽然不需要我们手动的加锁和释放锁了,但不代表他没有用到锁。同时,我们说每个对象本身结构中也内置了阻塞队列,线程持有器,锁重入计数器等字段。
Single
2019/02/14
4970
并发编程之显式条件
我们之前介绍 synchronized 关键字语义的时候说过,synchronized 虽然不需要我们手动的加锁和释放锁了,但不代表他没有用到锁。同时,我们说每个对象本身结构中也内置了阻塞队列,线程持有器,锁重入计数器等字段。
Single
2019/05/25
3470
Python 为什么要保留显式的 self ?
布鲁斯·埃克尔(Bruce Eckel)发了篇博文[1],提议从类方法的形参列表中删除“self”。我将解释为什么这个提议不能通过。(译注:Bruce 是《Thinking in Java》、《Thinking in C++》等多本书籍的作者,也是个 Python 开发者。他的文章总结了当年在巴西 Pycon 上的一次讨论,主要观点是在定义类方法时,形参中的“self”是多余的,而且由它引发的报错信息具有一定的误导性。)
小白学视觉
2022/05/22
2670
Python 为什么要保留显式的 self ?
布鲁斯·埃克尔(Bruce Eckel)发了篇博文[1],提议从类方法的形参列表中删除“self”。我将解释为什么这个提议不能通过。(译注:Bruce 是《Thinking in Java》、《Thinking in C++》等多本书籍的作者,也是个 Python 开发者。他的文章总结了当年在巴西 Pycon 上的一次讨论,主要观点是在定义类方法时,形参中的“self”是多余的,而且由它引发的报错信息具有一定的误导性。)
Python猫
2019/10/03
5030
(72) 显式条件 / 计算机程序的思维逻辑
上节我们介绍了显式锁,本节介绍关联的显式条件,介绍其用法和原理。显式条件也可以被称做条件变量、条件队列、或条件,后文我们可能会交替使用。 用法 基本概念和方法 锁用于解决竞态条件问题,条件是线程间的协作机制。显式锁与synchronzied相对应,而显式条件与wait/notify相对应。wait/notify与synchronized配合使用,显式条件与显式锁配合使用。 条件与锁相关联,创建条件变量需要通过显式锁,Lock接口定义了创建方法: Condition newCondition(); C
swiftma
2018/01/31
7580
Java 显式锁 Lock 与条件队列
在 Java 5.0 之前,在协调对共享对象的访问时可以使用的机制只有 synchronized 内置锁和 volatile 关键字。
Erwin
2020/12/14
9930
Python 为什么要保留显式的 self ?
大家知道 Python 的类方法里都要带个 self,而不像其它语言那样隐藏起来,这让人略有不爽。与人讨论后得知 Guido 曾经专门撰文解释过这个问题。我抽空先翻译了一下,与大家分享讨论。
Crossin先生
2020/02/26
4870
什么?left join 的 on 条件失效了?查出了不符合条件的数据?
最近发现很多人对 left join 的 on 条件的作用有误解,导致出现 Bug。 由于很多人都不太注意这问题,很容易造成故障。 下面我们简单复现这个问题,并解释为什么会这样,希望大家日常开发中万分小心。
明明如月学长
2023/04/21
1.6K0
什么?left join 的 on 条件失效了?查出了不符合条件的数据?
mysql带条件的插入语句
上面roleInfo与moduleInfo表是多对多关系,所以引入中间表moduleRole,用两个一对多实现多对多关系
别团等shy哥发育
2023/02/25
2.8K0
mysql带条件的插入语句
显式锁
Lock和ReentrantLock: 与内置加锁机制(synchronized)不同的是,Lock提供到了一种无条件的、可轮询的、定时的以及课中断的锁获取操作,所有加锁和解锁的方式都是显式的。Lock接口方法声明如下: public interface Lock{ void lock(); void lockInterruptibly() throws InterruptedException; boolean tryLock(); boolean tryLock(long
SuperHeroes
2018/05/31
4410
java中pageInfo分页带条件查询+查询条件的回显「建议收藏」
代码如下:解析在下边 Jetbrains全家桶1年46,售后保障稳定 <%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %> <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> <%-- Created by IntelliJ IDEA. User: Administrator Date: 2018/1/17 Time: 19:10 To chan
全栈程序员站长
2022/11/17
3.4K0
EntityFrameworkCore 当中使用了 using 创建事务是否需要显式 Rollback
直接定位 transaction 时会定位到EFCore中,这个里面我并没有找到对应的显式Rollback操作,但是经过网络上查询,找到了一个源码中实现了自动 Rollback
SpiritLing
2022/09/22
4850
C++中的显式类型转化
该文摘要总结:利用C++的static_cast, const_cast, reinterpret_cast, 以及dynamic_cast进行类型转换。static_cast简单而实用,适合大多数情况。const_cast用于去除对象的const属性。reinterpret_cast用于类型转换,但可能会丢失信息。dynamic_cast在运行时进行类型检查,可以安全地跨越继承层次。
弗兰克的猫
2018/01/09
1.8K0
分布式事务atomikos的原理_spring分布式事务
@Transactional(rollbackFor={Exception.class, RuntimeException.class}) public String test2(){ int i = test2RpcDao.testCinfInsert(); System.out.println(“cinf:” + i); int j = testRpcDao.testNaviInsert(); System.out.println(“navi:” + j); // int a=1/0; return null; }
全栈程序员站长
2022/09/20
1.1K0
[android] 隐式意图和显式意图的使用场景
看到Display.com.android.mms/.ui.ComposeMessageActivity
唯一Chat
2019/09/10
1.1K0
SQLite事务 SQLite插入多条语句为什么这么慢?.net (C#)
今天有个朋友测试 SQLite,然后得出的结论是: SQLite 效率太低,批量插入1000条记录,居然耗时 2 分钟! 下面是他发给我的测试代码。我晕~~~~~~   using System.Data; using System.Data.Common; using System.Data.SQLite; // 创建数据库文件 File.Delete("test1.db3"); SQLiteConnection.CreateFile("test1.db3"); DbProviderFactory f
hbbliyong
2018/03/05
2K0
Spring的编程式事务和声明式事务
事务管理对于企业应用来说是至关重要的,当出现异常情况时,它也可以保证数据的一致性。 Spring事务管理的两种方式 spring支持编程式事务管理和声明式事务管理两种方式。 编程式事务使用TransactionTemplate或者直接使用底层的PlatformTransactionManager。对于编程式事务管理,spring推荐使用TransactionTemplate。 声明式事务是建立在AOP之上的。其本质是对方法前后进行拦截,然后在目标方法开始之前创建或者加入一个事务,在执行完目标方法之后根据执行
nnngu
2018/04/04
1.7K0
显式原型与隐式原型
* 函数的prototype属性: 在定义函数时自动添加的, 默认值是一个空Object对象
李才哥
2020/03/28
4330
显式原型与隐式原型
上手隐式锁,显式锁
对于聚簇索引记录来说,有一个 trx_id 隐藏列,该隐藏列记录着最后改动该记录的 事务id 。那么如果在当前事务中新插入一条聚簇索引记录后,该记录的 trx_id 隐藏列代表的的就是 当前事务的 事务id ,如果其他事务此时想对该记录添加 S锁 或者 X锁 时,首先会看一下该记录的trx_id 隐藏列代表的事务是否是当前的活跃事务,如果是的话,那么就帮助当前事务创建一个 X锁 (也就是为当前事务创建一个锁结构, is_waiting 属性是 false ),然后自己进入等待状态 (也就是为自己也创建一个锁结构, is_waiting 属性是 true )。
一个风轻云淡
2022/11/15
5100
上手隐式锁,显式锁

相似问题

添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文