数据库事务

JDBC之简介

梦想的初衷 提交于 2020-01-17 20:09:16
5、JDBC的API java.sql包和javax.sql包 DriverManager类(驱动管理器),它可以创建连接,它本身就是一个创建Connection的工厂(Factory)。 Driver接口 入口 Connection接口,会根据不同的驱动产生不同的连接 Statement接口,发送sql语句 ResultSet接口(结果集),是用来接收select语句返回的查寻结果的。其实质类似于集合。 以上的资源都需要释放,释放的是数据库的资源 JDBC应用步骤 1,注册加载一个driver驱动 2,创建数据库连接(Connection) 3,创建一个Statement(发送sql) 4,执行sql语句 5,处理sql结果(select语句) 6,关闭Statement 7,关闭连接Connection。 注意:6,7两个步骤势必须要做的,因为这些资源是不会自动释放的,必须要自己关闭 访问Oracle的数据库的驱动名字叫o加到环境变量PATH中。 jdbc14.jar,这个jar文件中出访的驱动程序的.class文件 要使用这个驱动程序,要先将他 一,注册加载驱动driver,也就是强制类加载 1 、 Class.forName(driver); driver = "oracle.jdbc.driver.OracleDriver"; 2 、 Driver d=new

数据库事务学习

て烟熏妆下的殇ゞ 提交于 2020-01-17 18:04:13
数据库事务:    概念 : 数据库事务是构成单一逻辑工作单元的操作集合   概念解释:       1.数据库事务可以包含一个或多个数据库操作,但这些操作构成一个 逻辑上的整体 。       2.构成逻辑整体的这些数据库操作, 要么全部执行成功,要么全部不执行 。       3.构成事务的所有操作,要么全都对数据库产生影响,要么全都不产生影响,即不管事务是否执行成功, 数据库总能保持一致性状态 。       4.以上即使在数据库出现故障以及并发事务存在的情况下依然成立。    原子性(Atomicity):事务中的所有操作作为一个整体像原子一样不可分割,要么全部成功,要么全部失败。 一致性(Consistency):事务的执行结果必须使数据库从一个一致性状态到另一个一致性状态。           一致性状态是指:1.系统的状态满足数据的完整性约束(主码,参照完整性,check约束等)                  2.系统的状态反应数据库本应描述的现实世界的真实状态,比如转账前后两个账户的金额总和应该保持不变。 隔离性(Isolation):并发执行的事务不会相互影响,其对数据库的影响和它们串行执行时一样。 持久性(Durability):事务一旦提交,其对数据库的更新就是持久的。任何事务或系统故障都不会导致数据丢失。

Spring5.0源码深度解析之SpringBean声明事务底层实现原理

点点圈 提交于 2020-01-17 11:48:11
Spring事务 Spring声明式事务让我们从复杂的事务处理中得到解脱,使我们再也不用去处理这些步骤:获得连接、关闭连接、事务提交和回滚操作。再也不需要在事务相关方法中处理大量的try..catch..finally代码。 Spring中事务的使用虽然已经相对简单的多,但是,还是有很多的使用和配置规则,下面我们开始我们本章重点。 SpringAop基本原理和思想 1、事务保证数据一致性问题,只需要加上 @Transactional 2、纯手写SpringAop环绕通知+手动事务就可以声明事务 基于Spring注解方式构建整合JDBC环境 @Repository public class OrderDao { @Autowired() private JdbcTemplate jdbcTemplate; public void addOrder() { jdbcTemplate.update("insert into order_info values(null,'mayikt','zhangsan','1111')"); } } @Configuration @ComponentScan("com.mayikt") @EnableTransactionManagement //开启事务注解 public class MyConfig { //注入到ioc容器中 beanid

spring 事务回滚

风格不统一 提交于 2020-01-17 08:27:54
1、遇到的问题   当我们一个方法里面有多个数据库保存操作的时候,中间的数据库操作发生的错误。伪代码如下: public method() { Dao1.save(Person1); Dao1.save(Person2); Dao1.save(Person2);//假如这句发生了错误,前面的两个对象会被保存到数据库中 Dao1.save(Person2); }   期待的情况:发生错误之前的 所有数据库保存操作都回滚 ,即不保存   正常情况:前面的数据库操作会被执行,而发生数据库操作错误开始及之后的所有的数据保存操作都将失败。这样子应该都不是我们要的结果吧。   当遇到这种情况,我们就可以使用Spring的事务解决这个问题。 2、异常的一些基本知识 1) 异常的架构   异常的继承结构:Throwable为基类,Error和Exception继承Throwable,RuntimeException和IOException等继承Exception。Error和RuntimeException及其子类成为未检查异常(unchecked),其它异常成为已检查异常(checked)。 2)Error异常   Error表示程序在运行期间出现了十分严重、不可恢复的错误,在这种情况下应用程序只能中止运行,例如JAVA 虚拟机出现错误。Error是一种unchecked Exception

事务(包含Java程序)

倾然丶 夕夏残阳落幕 提交于 2020-01-17 06:02:30
什么是事务 事务是一个工作单元,该单元内的所有操作是一个整体,要么全部执行成功,要么就全部失败。只要有任一个单元操作失败,则操作全部失败。 注意 :事务主要加在对数据库数据发送改变的操作中,例增删改,像查询则不需要事务 为什么需要事务 SQL语句只能执行一条,而事务可以把多个SQL语句组成一个事务,同时执行 事务的四大特性(ACID) 标记: 面试题 1、 原子性(Atomicity) :事务中的所有操作是不可再分割的原子单位,要么全部成功,要么全部失败 标记: 红色 2、 一致性(Consistency) :事务执行后,数据库状态与其他业务规则保持一致。 标记: 红色 如: 转账业务,无论事务执行成功与否,参与转账的两个账号余额之和应该是不变的。 3、 隔离性(Isolation) :隔离性是指在并发操作中,不同事务之间应该隔离起来,使每个并发中的事务不会互相干扰 标记: 红色 4、 持久性(Durability) :一旦事务提交成功,事务中的所有操作都必须被持久化到数据库中,即使提交事务后,数据库马上奔溃,在数据库重启时,也必须能保证通过某种机制恢复数据 标记: 红色 MySQL中的事务 标记: 红色 例: #胡一刀给胡一菲转账500元 START TRANSACTION ; UPDATE bank SET cmoney = cmoney + 500 WHERE cname =

Mysql查漏补缺笔记

雨燕双飞 提交于 2020-01-17 05:17:03
目录 查漏补缺笔记2019/05/19 文件格式后缀 丢失修改,脏读,不可重复读 超键,候选键,主键 构S(Stmcture)/完整性I(Integrity)/数据操纵M(Malippulation) 关系范式 系统设计 数据库语言 两段协议 SQL联表查询,函数substr,right 查漏补缺笔记2019/05/19 文件格式后缀 数据库文件的扩展名为.DBC 数据表文件的扩展名为 .DBF 表单文件的扩展名为 .SCX 项目文件的扩展名为 .PJX 丢失修改,脏读,不可重复读 事务之间的对数据的并发操作会带来三种问题:丢失修改,脏读,不可重复读。 丢失修改:一个事务读取一个数据时,另外一个事务也访问该同一数据。那么,在第一个事务中修改了这个数据后,第二个事务也修改了这个数据。这样第一个事务内的修改结果就被丢失,因此称为丢失修改。 脏读:当一个事务正在访问数据并且对数据进行了修改,而这种修改还没有提交到数据库中,这时另外一个事务也访问这个数据,然后使用了这个数据。因为这个数据是还没有提交的数据,那么另外一个事务读到的这个数据是脏数据,根据脏数据的操作可能是不正确的。 不可重复读:一个事务内多次读同一数据。在这个事务还没有结束时,另外一个事务也访问该同一数据。那么,在第一个事务中的两次读数据之间,由于第二个事务的修改,这就发生了在一个事务内两次读到的数据是不一样的情况

mysql group replication观点及实践

瘦欲@ 提交于 2020-01-17 04:56:51
一:个人看法 Mysql Group Replication 随着5.7发布3年了。作为技术爱好者。mgr 是继 oracle database rac 之后。 又一个“真正” 的群集,怎么做到“真正” ? 怎么做到解决复制的延迟,怎么做到强数据一致性?基于全局的GTID就能解决? 围绕这些问题进行了一些mgr 的实践, 为未来的数据库高可用设计多条选择。 mysql5.7手册17章可以看到其原理,网络上也很多同志写了关于其技术原理,这里自己对比rac理解下: 作为shared nothing (mgr)架构,其数据一致性实现较 shared everything(RAC) 架构要难, MGR通过一致性(Paxos)协议,保证数据在复制组内的存活节点里是一致的,复制组内的各成员都可以进行读写, 其实现机制是,当某个实例发起事务提交时,会向组内发出广播,由组内成员决议事务是否可以正常提交, MGR 在遇到事务冲突时(多节点同时修改同一行数据),会自动识别冲突,并根据提交时间让先提交的事务成功执行,后提交的事务回滚,其原理示意图如下: 对于 sharad nothing 架构,必须要了解分布式协议PAXOS,分布式状态机 理论,而在这块我翻阅了很多资料,发现其实并不是很成熟的。从上图可以看出来MGR 的冲突检测机制 类似于 rac 的gird 群集组件 也具备通告广播的群集服务

mysql 事务

核能气质少年 提交于 2020-01-17 02:24:11
mysql事务的四大特性: 原子性: 组成事务处理的语句形成了一个逻辑单元,不能只执行其中的一部分。换句话说,事务是不可分割的最小单元。比如:银行转帐过程中,必须同时从一个帐户减去转帐金额,并加到另一个帐户中,只改变一个帐户是不合理的。 一致性: 在事务处理执行前后,数据库是一致的。也就是说,事务应该正确的转换系统状态。比如:银行转帐过程中,要么转帐金额从一个帐户转入另一个帐户,要么两个帐户都不变,没有其他的情况。 隔离性: 一个事务处理对另一个事务处理没有影响。就是说任何事务都不可能看到一个处在不完整状态下的事务。比如说,银行转帐过程中,在转帐事务没有提交之前,另一个转帐事务只能处于等待状态。 持续性: 事务处理的效果能够被永久保存下来。反过来说,事务应当能够承受所有的失败,包括服务器、进程、通信以及媒体失败等等。比如:银行转帐过程中,转帐后帐户的状态要能被保存下来。 MyISAM不支持事物,InnoDB支持事物。 MYSQL的事务处理主要有两种方法 1、用begin,rollback,commit来实现 START TRANSACTION 开始一个事务 ROLLBACK 事务回滚 COMMIT 事务确认 2、直接用set来改变mysql教程的自动提交模式 MYSQL默认是自动提交的,也就是你提交一个QUERY,它就直接执行!我们可以通过 set autocommit=0

数据库事务的ACID

为君一笑 提交于 2020-01-17 01:54:49
对于支持Transaction的数据库而言,必须有以下特征 一、Atomicity 原子性 一个事务中的所有操作,执行情况有两种:全部完成和全部不完成。不能停滞在中间某个环节,执行过程中出现错误时,会回滚到事务开始前的状态 二、Consistency 一致性 (wikipedia):Ensures that any transaction will bring the database from one valid state to another. 定义的规则:constraints(约束),cascades(级联),triggers(触发) 所有写入数据库的数据必须满足上述规则或者规则组合(Any data written to the database must be valid according to all defined rules) 不保证应用程序需求的事务正确性,仅仅保证任何程序错误不会导致破坏规则。 (百科):一个事务可以封装状态改变(除非它是一个只读的)。事务必须始终保持系统处于一致的状态,不管在任何给定的时间并发事务有多少。 三、Isolation 隔离性(串行化) 提供隔离性是并发控制的主要目标。如果有两个事务,运行在相同的时间内,执行相同的功能,事务的隔离性将确保每一事务在系统中认为只有该事务在使用系统。 四、Durability 持久性 事务完成后

Redis事务与持久化

余生颓废 提交于 2020-01-17 01:15:53
1. 事务描述 (1)什么是事务 事务,就是把一堆事情绑在一起,按顺序的执行,都成功了才算完成,否则恢复之前的样子 事务必须服从ACID原则,ACID原则分别是原子性(atomicity)、一致性(consistency)、隔离性(isolation)和持久性(durability) 原子性:操作这些指令时,要么全部执行成功,要么全部不执行。只要其中一个指令执行失败,所有的指令都执行失败,数据进行回滚,回到执行指令前的数据状态 一致性:事务的执行使数据从一个状态转换为另一个状态,但是对于整个数据的完整性保持稳定 隔离性:在该事务执行的过程中,无论发生的任何数据的改变都应该只存在于该事务之中,对外界不存在影响,只有在事务确认提交之后们才会显示该事务对数据的改变,其他事务才能获取到这些改变后的数据 持久性:当事务正确完成后,它对于数据的改变是永久性的    (2)什么是事务 第一类丢失更新:撤销一个事务时,把其他事务已提交的更新数据覆盖 脏读:一个事务读取到另一个事务未提交的更新数据 幻读:一个事务执行两次查询,第二次结果集包含第一次中没有或某些行已经被删除的数据,造成两次结果不一致,只是另一个事务在这两次查询中间插入或删除了数据造成的 不可重复读:一个事务两次读取同一行的数据,结果得到不同状态的结果,中间正好另一个事务更新了该数据,两次结果相异,不可被信任 第二类丢失更新