回滚

spring事务在实际项目开发中的使用

爷,独闯天下 提交于 2019-11-28 00:51:14
一, 事务的一些基础知识简单回顾一下,讲的不是很深入,网上博客很多。 1,关于事务的四大特性:原子性、隔离性、一致性、持久性 本文不再赘述; 2,事务的隔离级别:读未提交,读已提交,可重复读,串行化(这里应该深入了解各个级别会出现什么问题,比如脏读,不可重复读,幻读) 3,事务的传播行为:事务传播行为指的就是当一个事务方法被另一个事务方法调用时,这个事务方法应该如何进行。 例如:methodA事务方法调用methodB事务方法时,methodB是继续在调用者methodA的事务中运行呢,还是为自己开启一个新事务运行,这就是由methodB的事务传播行为决定的。默认采用:PROPAGATION_REQUIRED 二,接下来我们简单回顾一下java的异常体系: Throwable 是 Java 语言中所有错误或异常的超类,在 Java 中只有 Throwable 类型的实例才可以被抛出(throw)或者捕获(catch),它是异常处理机制的基本组成类型。 实例分为 Error 和 Exception 两种。 Error 类是指 java 运行时系统的内部错误和资源耗尽错误。应用程序不会抛出该类对象。如果 出现了这样的错误,除了告知用户,剩下的就是尽力使程序安全的终止。 Exception 又有两个分支 , 一个是运行时异常 RuntimeException , 一 个是检查异常

Python连接MySQL数据库之pymysql模块使用

旧城冷巷雨未停 提交于 2019-11-28 00:07:16
Python3连接MySQL 本文介绍Python3连接MySQL的第三方库--PyMySQL的基本使用。 PyMySQL介绍 PyMySQL 是在 Python3.x 版本中用于连接 MySQL 服务器的一个库,Python2中则使用mysqldb。 Django中也可以使用PyMySQL连接MySQL数据库。 PyMySQL安装 pip install pymysql 连接数据库 注意事项 在进行本文以下内容之前需要注意: 你有一个MySQL数据库,并且已经启动。 你有可以连接该数据库的用户名和密码 你有一个有权限操作的database 基本使用 # 导入pymysql模块 import pymysql # 连接database conn = pymysql.connect(host=“你的数据库地址”, user=“用户名”,password=“密码”,database=“数据库名”,charset=“utf8”) # 得到一个可以执行SQL语句的光标对象 cursor = conn.cursor() # 定义要执行的SQL语句 sql = """ CREATE TABLE USER1 ( id INT auto_increment PRIMARY KEY , name CHAR(10) NOT NULL UNIQUE, age TINYINT NOT NULL

Git复习(十三)之git revert和git reset区别

北慕城南 提交于 2019-11-27 23:33:18
git revert用法以及与git reset的区别 git revert用法 git revert 撤销 某次操作,此次操作之前和之后的commit和history都会保留,并且把这次撤销 作为一次最新的提交 * git revert HEAD 撤销前一次 commit * git revert HEAD^ 撤销前前一次 commit * git revert commit (比如:fa042ce57ebbe5bb9c8db709f719cec2c58ee7ff)撤销指定的版本,撤销也会作为一次提交进行保存。 git revert是提交一个新的版本,将需要revert的版本的内容再反向修改回去, 版本会递增,不影响之前提交的内容 git revert 和 git reset的区别 1. git revert是用一次新的commit来回滚之前的commit,git reset是直接删除指定的commit。 2. 在回滚这一操作上看,效果差不多。但是在日后继续merge以前的老版本时有区别。因为git revert是用一次逆向的commit“中和”之前的提交,因此日后合并老的branch时,导致这部分改变不会再 次出现,但是git reset是之间把某些commit在某个branch上删除,因而和老的branch再次merge时,这些被回滚的commit应该还会被引入。 3.

分布式理论基础(一)一致性及解决一致性的两种方式:2PC和3PC

这一生的挚爱 提交于 2019-11-27 22:05:39
1 一致性 1.1 简述 一致性,是指对每个节点一个数据的更新,整个集群都知道更新,并且是一致的 假设一个具有N个节点的分布式系统,当其满足以下条件时,我们说这个系统满足一致性: 全认同 : 所有N个节点都认同一个结果 值合法 : 该结果必须由N个节点中的过半节点提出 可结束 : 决议过程在一定时间内结束,不会无休止地进行下去 1.2 面临着的问题 消息传递异步无序 : 现实网络不是一个可靠的信道,存在消息延时、丢失,节点间消息传递做不到同步有序 节点宕机 : 节点持续宕机,不会恢复 节点宕机恢复 : 节点宕机一段时间后恢复,在分布式系统中最常见 网络分化 : 网络链路出现问题,将N个节点隔离成多个部分 拜占庭将军问题 : 节点或宕机或逻辑失败,甚至不按套路出牌抛出干扰决议的信息 假设现实场景中也存在这样的问题: 周五 我:晚上下班吃鸡 周六凌晨 xc:好的 // 消息延迟 我:... --------------------------------- 我:晚上下班吃鸡 xc:No (两小时后) xc:No problem! // 宕机节点恢复 我:… --------------------------------- 我:晚上下班吃鸡 … // 节点宕机 --------------------------------- 我:晚上下班吃鸡 cx:好,我们去大保健! //

laravel事务回滚失败

怎甘沉沦 提交于 2019-11-27 22:03:57
1.  DB::beginTransaction();//开启事务    DB::rollback();//回滚    DB::commit();//提交 2 查看MySQL数据表是否为InnoDB表 3 查看开启事务的是否为对应数据库 DB::connection('对应的数据库名')->beginTransaction(); DB::connection('对应的数据库名')->rollback(); DB::connection('对应的数据库名')->commit(); 来源: https://www.cnblogs.com/marco123/p/11379705.html

drop,delete,truncate

此生再无相见时 提交于 2019-11-27 21:54:27
(1)DELETE语句执行删除的过程是每次从表中删除一行,并且同时将该行的删除操作作为事务记录在日志中保存以便进行进行回滚操作。 TRUNCATE TABLE 则一次性地从表中删除所有的数据并不把单独的删除操作记录记入日志保存,删除行是不能恢复的。并且在删除的过程中不会激活与表有关的删除触发器。执行速度快。 (2)表和索引所占空间。 当表被TRUNCATE 后,这个表和索引所占用的空间会恢复到初始大小, DELETE操作不会减少表或索引所占用的空间。 drop语句将表所占用的空间全释放掉。 (3)一般而言,drop > truncate > delete (4)应用范围。 TRUNCATE 只能对TABLE; DELETE可以是table和view (5)TRUNCATE 和DELETE只删除数据, DROP则删除整个表(结构和数据)。 (6)truncate与不带where的delete :只删除数据,而不删除表的结构(定义)drop语句将删除表的结构被依赖的约束(constrain),触发器(trigger)索引(index);依赖于该表的存储过程/函数将被保留,但其状态会变为:invalid。 (7)delete语句为DML(data maintain Language),这个操作会被放到 rollback segment中,事务提交后才生效。如果有相应的 tigger

并发、事务和锁

橙三吉。 提交于 2019-11-27 20:50:54
并发,在操作系统中,是指一个很短的时间段中有几个程序都处于已启动运行到运行完毕之间,并发程序之间有相互制约关系,直接制约体现为一个程序需要另一个程序的计算结果,间接制约体现为多个程序竞争同一资源,如处理机、缓冲区、数据等。在数据库系统中,并发主要是指资源的争用,当两个进程同时在访问或更新同一个数据时,产生资源的争用,资源争用会引起一系列的问题,比如数据不一致、查询阻塞、死锁等。 一,并发模式 在数据库系统中,当多个进程访问同一资源时,默认情况下,SQL Server会通过各种类型的锁来协调资源的访问,确保在并发环境下数据保持一致的状态。而锁的作用范围是在事务中,事务建立在并发模式下。并发模式控制当发生读写冲突时,数据应该如何处理以保证数据的一致性。注意,写和写之间永远冲突。 1,乐观并发模式 对于乐观并发模式,SQL Server假设只有少量的冲突发生,默认的机制是使用快照技术,在写进程完成修改数据之前,先把数据的行版本保存到tempdb中。由于数据的旧数据已经保存,读进程可以直接读取已经保存的行版本,而不会受到写进程的影响。 乐观并发使得读写进程不会相互阻塞,但是,这会导致一个潜在的问题,读进程可能会读取到老的数据。 2,悲观并发模式 这是默认的并发模式,在悲观并发模式下,SQL Server认为有大量的写操作发生,并且写操作会受到写操作的影响。也就是说

【已解决】unitils使用@DataSet插入测试数据,测试结束后不能回滚

久未见 提交于 2019-11-27 20:49:40
使用@DataSet的时候,unitils使用的事务管理器必须在spring的配置文件中定义。 <bean id="dataSource" class="org.unitils.database.UnitilsDataSourceFactoryBean" /> 否则@DataSet会使用unitils的事务管理,而在测试方法里操作业务DAO会使用spring的事务管理,造成的后果是操作DAO生成的数据可以回滚,但是@DataSet导入的数据不能回滚。 来源: oschina 链接: https://my.oschina.net/u/719192/blog/173642

Spring 事务

我的未来我决定 提交于 2019-11-27 19:23:14
Spring 事务 关于理论性的内容,我在之前的一篇文章中介绍过,这里不再过多阐述,这里给出之前文章的链接: Spring 事务管理 什么是事务 是一组逻辑操作,要么执行,要么不执行。 事务的特性 ACID (原子性、一致性、隔离性、持久性) 并发事务带来的问题 脏读 丢失修改 不可重复读 幻读 配置事务管理器 <!-- 事务管理器 --> <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> <!-- 数据源 --> <property name="dataSource" ref="dataSource" /> </bean> Spring 事务接口 PlatformTransactionManager :(平台)事务管理器 TransactionDefinition : 事务定义信息(事务隔离级别、传播行为、超时、只读、回滚规则) TransactionStatus : 事务运行状态 1. PlatfromTransactionManager 接口介绍: 该接口主要有三个方法: Public interface PlatformTransactionManager()...{ TransactionStatus

SQLite进阶-18.事务

戏子无情 提交于 2019-11-27 19:17:31
目录 SQLite事务 事务的属性 事务控制 BEGIN TRANSACTION命令 COMMIT命令 ROLLBACK命令 SQLite事务 事务(Transaction) 是一个对数据库执行工作单元。事务是以逻辑顺序完成的工作单元或序列,可以是由用户手动操作完成,也可以是由某种数据库程序自动完成。 事务是指一个或者多个改变数据库的扩展。例如:如果你正在创建一个记录或者更新一个记录或者从表中删除一个记录,那么你正在该表上执行事务。重要的是要控制事务以确保数据的完整性和处理数据库错误。 实际上,你可以把许多的SQLite查询联合成一组,把所有这些放在一起作为事务的一部分进行执行。 事务的属性 事务(Transaction)具有以下四个标准属性,通常根据首字母缩写为ACID: 原子性(Atomicity) : 确保工作单位内的所有操作都成功完成,否则,事务会在出现故障时终止,之前的操作也会回滚到以前的状态。 一致性(Consistency) : 确保数据库在成功提交的事务上正确的改变状态。 隔离性(Isolation) : 使事务操作相互独立和透明。 持久性(Durability) : 确保已提交事务的结果或效果在系统发生故障的情况下仍然存在。 事务控制 使用下面的命令来控制事务: BEGIN TRANSACTION: 开始事务处理。 COMMIT: 保持更改,或者可以使用END