网站大量收购闲置独家精品文档,联系QQ:2885784924

事务与连接池.doc

  1. 1、本文档共9页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
事务与连接池 事务 事务介绍 事务的概念 事务指逻辑上的一组操作,组成这组操作的各个单元,要不全部成功,要不全部不成功 数据库开启事务命令 start transaction 开启事务 Rollback 回滚事务 Commit 提交事务 Mysql中使用事务 1.创建表 create table account( id int primary key auto_increment, name varchar(20), money double ); insert into account values(null,aaa,1000); insert into account values(null,bbb,1000); insert into account values(null,ccc,1000); 2、MySQL中事务默认自动提交的,每当执行一条SQL,就会提交一个事务 (一条SQL 就是一个事务) Oracle 中事务默认 不自动提交,需要在执行SQL 语句后 通过commint 手动提交事务 3、mysql管理事务 方式一 :同时事务管理SQL 语句 start transaction 开启事务 rollback 回滚事务 (将数据恢复到事务开始时状态) commit 提交事务 (对事务中进行操作,进行确认操作,事务在提交后,数据就不可恢复) 方式二:数据库中存在一个自动提交变量 ,通过 show variables like %commit%; ---- autocommint 值是 on,说明开启自动提交 关闭自动提交 set autocommit = off / set autocommit = 0 如果设置autocommit 为 off,意味着以后每条SQL 都会处于一个事务中,相当于每条SQL执行前 都执行 start transaction 补充:Oracle中 autocommit 默认就是 off Jdbc使用事务 当Jdbc程序向数据库获得一个Connection对象时,默认情况下这个Connection对象会自动向数据库提交在它上面发送的SQL语句。若想关闭这种默认提交方式,让多条SQL在一个事务中执行,可使用下列语句: JDBC控制事务语句 Connection.setAutoCommit(false); // 相当于start transaction Connection.rollback(); rollback Cmit(); commit 示例 演示银行转帐案例 在JDBC代码中使如下转帐操作在同一事务中执行。 update from account set money=money-100 where name=‘a’; update from account set money=money+100 where name=‘b’; 设置事务回滚点 Savepoint sp = conn.setSavepoint(); Conn.rollback(sp); Cmit(); //回滚后必须要提交 事务特性 原子性(Atomicity) 原子性是指事务是一个不可分割的工作单位,事务中的操作要么都发生,要么都不发生。? 一致性(Consistency) 事务前后数据的完整性必须保持一致。 隔离性(Isolation) 事务的隔离性是指多个用户并发访问数据库时,一个用户的事务不能被其它用户的事务所干扰,多个并发事务之间数据要相互隔离。 持久性(Durability) 持久性是指一个事务一旦被提交,它对数据库中数据的改变就是永久性的,接下来即使数据库发生故障也不应该对其有任何影响。 事务隔离级别 多个线程开启各自事务操作数据库中数据时,数据库系统要负责隔离操作,以保证各个线程在获取数据时的准确性。 如果不考虑隔离性,可能会引发如下问题 1、脏读 :指一个事务读取另一个事务未提交的数据 A 转账 给B 100,未提交 B 查询账户多了100 A 回滚 B 查询账户那100不见了 2、不可重复读:在一个事务先后两次读取发生数据不一致情况,第二次读取到另一个事务已经提交数据 (强调数据更新 update) A 查询账户 5000 B 向 A 账户转入 5000 A 查询账户 10000 3、虚读(幻读) : 在一个事务中,第二次读取发生数据记录数的不同 ,读取到另一个事务已经提交数据 (强调数据记录变化 insert ) A 第一次读取 存在5条记录 B 向 A 插入一条新的记录 A 第二次读取 存在6条记录 数据库内部定义了四种隔离级别,用于解决三种隔离问题 1 Serializable:可避免脏读

文档评论(0)

gangshou + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档