mysql - InnoDB中的锁
问 题 表如下: Create Table: CREATE TABLE `t` ( `a` int(11) DEFAULT NULL, KEY `idx_a` (`a`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1 数据如下: +------+ | a | +------+ | 11 | | 12 | | 13 | | 14 | +------+ 有两个事务同时开启: 事务1: mysql> start transaction; Query OK, 0 rows affected (0.00 sec) mysql> delete from t where a = 11; Query OK, 1 row affected (0.00 sec) mysql> 事务2 mysql> start transaction; Query OK, 0 rows affected (0.02 sec
220 2022-07-19
编程技术问答社区
事务一致性与原子性的区别
问 题 对于事务一致性的理解不是很到位。 网上大体的回答是从一个状态到另一个状态,举例也都是张三给李四转100块钱,那么保证张三和李四的总和不变就是一致性。初步判断这个举例有些牵强,例如,有一种业务逻辑,张三需要从账户中减掉100,而李四只会从账户中增加60,只要保证这两个同时成功,也叫一致性吧。 还有文章说保证开始状态和终态中的约束之类的一致,就是一致性。 总是感觉这两种解释都有些牵强,请问事务的一致性侧重点是什么,与原子性的区别在哪里,非常感谢 解决方案 参考了很多文章,终于搞清楚了,谢谢各位 事务隔离级别浅析
440 2022-07-19
编程技术问答社区
php - 12306抢票并发怎么处理?
问 题 公司有个抢单的业务,要网站实现。 我自己设计的解决方案想问问大家是否可行,如果不可行有更成熟的方案吗? 我的方案: 请求进来之后首先判断当前时间是否在抢单时间内,如果在就修改缓存中的抢单人id,表明此订单被抢单人抢到,然后修改抢单允许时间为false。 解决方案 为什么要扯上12306呢?即使是12306的抢票目前来看也有很大的问题。 你的方案如果在并发小的情况下是可以的,如果并发很大的情况下,会造成绝对第一人事实上抢不到订单,甚至系统异常, 我们看一下你的流程 step1:通过了抢单时间判断 step2:保存该抢单人ID step3:执行修改抢单时间为false 但是如果并发量特别大的情况呢?有1000个请求同时到达,第一个请求通过了step1,然后在执行step2和step3的同时,服务器接受到的请求会依然通过step1判断,直至第一个请求执行完step3,这就造成这期间所有的请求返回的结果都是成功抢到了单,但事实
398 2022-07-19
编程技术问答社区
transaction - laravel 事务不提交 不知道哪里写错了
问 题 laravel 事务不提交 不知道哪里写错了 以下是代码 DB::transaction(function () use ($payment,$userBalance) { Payment::insert($payment); $userName = $payment['payment_user_name']; User::where('user_name', $userName) ->increment('user_balance', $userBalance); }); 跪求指教 解决方案 DB::transaction(function () use ($payment,$userBalance) { try { Payment::ins
188 2022-07-19
编程技术问答社区
java - for循环中控制事务
问 题 Java项目开发过程中,有for循环,逐条处理10万条数据。由于逐条处理数据的时候,要更新6~7张表,希望,每次在执行for循环的时候,都对数据库做一次提交。 1.我的处理方法 是,将for循环中的方法提出来,然后,使用spring的手动开启事务的方法,在提取出来的方法上,配置了@Transactional(propagation = Propagation.REQUIRES_NEW),但是测试了几次,都没有效果。 2.由于提出处理的方法中,也有更新表,调用外部系统接口,查询表的操作。所以我想把有关联关系的操作 配置 在一个事务中,然后 外层的事务配置和内层的事务配置 如何来管理? 希望 得到各位的解答,谢谢!!! 解决方案 如果题主是用spring来做声明式事务的话,方法直接调用内部方法是不会走到代理类的(也就是不会走到切面),所以@Transactional可能会失效 题主这里的外部接口是通过RPC方法调用的么?如果通过RPC调用的话,建议题
1294 2022-07-19
编程技术问答社区
PHP框架是如何处理MySQL事务多次开启和事务操作嵌套的?求框架源码
问 题 一般的PHP框架是如何处理MySQL事务多次开启和事务操作嵌套的?求框架源码 解决方案 哈哈,最近刚把这个功能提交到ThinkPHP主线上,原理是记录事务的嵌套数量,只在最外层提交事务。你可以参考参考: public function startTrans() { $this->initConnect(true); if (!$this->_linkID) { return false; } //数据rollback 支持 if (0 == $this->transTimes) { // 记录当前操作PDO $this->transPdo = $this->_linkID; $this->_linkID->beginTransaction(); } $this->transTimes++; return; } public fu
628 2022-07-19
编程技术问答社区
java - 在并发的情况下,程序事务和数据库事务是怎么运行的?
问 题 @Transactional public void selectAndUpdate() { status = select ... for update; if(status!="初始值") { return; } //逻辑开始 程序逻辑 ... 举例:用户支付 1.生成用户签名 2.发起用户支付到第三方 //逻辑结束 update status语句... } 如果利用这种方式来控制并发会有什么问题?另外我还想问大家的是:多个线程的话,会不会导致当一个线程执行到程序逻辑那块的时候,资源被另一个线程抢去的可能?导致另一个线程进入这个方法,发现状态还是没有被改变,然后又进入程序逻辑这块,导致两个线程都执行了一遍吗?数据库的一个事务没有完成的话,会让另外一个线程的事务进入吗? 解决方案 for update的缺点@Hisoka已经说了,for upda
280 2022-07-19
编程技术问答社区
spring-mvc - SpringMVC当中的 @Transactional(readOnly = true) 意义?
问 题 如题 SpringMVC当中的 @Transactional(readOnly = true) 意义? 有人回答说是 : 有写数据库的操作会报异常,这就是作用 难道就是为了控制写代码的人规范,防止他们在这种方法里面写修改数据库的代码? 另外: 如果一个方法里面跟数据库操作的部分都只是select的话,那为什么还要加@Transactional注解呢 事务的特性不是为了保证数据的完整性吗? select 语法不会更改数据库,也就不会存在回滚一说了吧! 解决方案 Spring Doc里的描述。 Read-only status: A read-only transaction can be used when your code reads but does not modify data. Read-only transactions can be a useful optimization in some cases
298 2022-07-19
编程技术问答社区
java - 新开一个线程事务怎么控制?
问 题 在run方法里没法用@Transactional来做事务,run方法上又不能加exception,怎么能控制事务保证异常就回滚呢? 解决方案 run方法里调service方法。
664 2022-07-19
编程技术问答社区
php - 两条sql操作不同表,如何保证两次操作都达到预期效果
问 题 有这样一个需求 当请求我的一个php接口程序,脚本会进行一个insert a表,然后update b 表数据的操作。 当一些特殊的原因(数据量大,并发请求过多), 会出现 insert完成但 update失败的情况,请问各位设计这类程序的时候是怎样做的? mysql事务可以完成这个操作,但是事务回滚的话 a表 b表都没有进行更改。(这样不符合需求),谢谢。 解决方案 不符合需求,那就不要放到事务里啊!事务特性就是一致性啊! 还有你需要检查update失败的原因!提高并发! 假如一致性非常强的操作,必须放到事务里。 假如不是时效性的操作,你可以当到队列事件里,把主表更新之后再去更新b表的数据! 还有一种方式 就是通过脚本的方式去修正,你只去修改a的数据,等某个时间点用shell脚本去修正b的数据!其实微博的有些功能同步的就很慢。。。有个更新延迟!
110 2022-07-19
编程技术问答社区
事务 - Spring Transactional ReadOnly 和 不加Transactional的区别
问 题 在网络上搜了下,答案如下两个。 说下我的理解,其实不管你写不写transaction,事务是肯定有的。只是默认单条sql一个事务,如果我们在Service层的方法上加Transaction注解,那么事务的范围就会扩大,包含在service方法执行的所有sql。Mysql默认的隔离级别是可以防止不可重复读的,所以,加上Transactional,里面如果涉及多次查询一条记录,中间即使被其它事务修改,这条记录还是一样的。这和是否加readOnly没有关系,加了只会告诉数据库底层驱动,达到一个好的效率,仅此而已。但如果不加Transactional,那么每条sql一个事务,中间被其它事务改了数据,都会实时读取到最新值。 以上是我的理解,欢迎讨论指教! 作者:lee 链接:https://www.zhihu.com/question/39074428/answer/81473880 来源:知乎 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。 如
760 2022-07-17
编程技术问答社区
线程池 - spring的service中新建一个线程的事务问题
问 题 想用线程池的方式来处理业务,在service中调用线程池然后处理业务,线程方法里引用了其他的service,不知道整体的事务spring会不会控制,还是只能控制引用的各个service。线程池是Executors建的,应该没有被spring管理 解决方案 线程池最好配置在.xml中。事务是用默认属性还是根据业务不同使用的事务不同?
170 2022-07-17
编程技术问答社区
php - 数据库的哪些操作需要放到应用层来写?
问 题 我现在是写php为主。 这几天看了有关mysql中事务,锁之类的内容。 我看到了有一些php框架提供了悲观锁,乐观锁之类的api.但是我又看到一些人说,在应用层无需考虑锁这方面的东西,因为数据库会帮我们做好。 我想问的是: 1.数据库的哪些操作需要放到应用层来做?哪些是数据库底层自己维护的或者说应该放到存储过程的? 2.增删改查,事务提交回滚,还有哪些? 3.现在的php框架很多都提供了ORM框架,基于ORM的api如何优化sql? 解决方案 CURD || 事物提交回滚就能应付常用场景 对锁机制应用层也有相关的API ,您所有的应用层的操作就是拼个SQL 然后Mysql去跑嘛...?,难道理解错了
188 2022-07-17
编程技术问答社区
java编程思想读书笔记 - Java编程思想习题请教: 使用动态代理来编写一个系统以实现事务?
大家好,小弟最近在学习《Java编程思想》第四版,学习到第十四章《类型信息》中动态代理的时候,在习题23后遇到一个问题,使用动态编写一个系统以实现事务,不知道该如何解决,特来请教大家,题目如下: 使用动态代理来编写一个系统以实现事务,其中,代理在被代理的调用执行成功(不抛出任何异常)执行提交,而在执行失败时执行回滚。你的提交和回滚都针对一个外部的文本文件,该文件不在Java异常的控制范围之内。你必须注意操作的原子性。 该题目英文原文如下: 谢谢大家。
266 2022-07-17
编程技术问答社区
php - 大家帮我看看数据库的事务如何优化?
好多ORM可以捕获异常,然后回滚这样就非常的方便,但其实我觉得还没有解决根本问题,每一条sql,orm操作不还得自己判断是否成功吗,并且ORM也不规范,有时执行失败抛错,有时又返回false,真是搞不懂,每一步都要自己判断回滚,真是崩溃了,每一步操作都要判断结果,回滚,真是崩溃了,真是崩溃了,真是崩溃了,真是崩溃了,真是崩溃了,真是崩溃了!
178 2022-07-17
编程技术问答社区