本帖最后由 小石姐姐 于 2017-12-27 18:41 编辑
##使用MVC设计模式完成转账的操作
* 事务概述: 指的是逻辑上的一组操作,组成这组操作的各个逻辑单元**要么一起成功,要么一起失败.**
* MySQL的事务管理:
* 创建一个账号表:
* MySQL的事务管理有两种方式(mysql数据库事务默认是自动提交的.oracle数据库事务是默认不自动提交的)
* 1.手动开启事务
* 2.设置一个自动提交的参数
* JDBC中的事务管理:
* JDBC中的事务管理的API:
* setAutocomit()设置自动提交.默认为true
* commit()提交事务
* rollback:回滚事务
* 步骤分析:
* 1.创建一个页面
* 2.导入JDBC相关的jar包和工具类
* 3.创建包结构
* 4.提交到Servlet--service--dao
* 5.页面跳转
* **事务的特性:**
* 1.原子性: 强调事务的不可分割.(要么成功,要么失败)
* 2.一致性: 强调的是事务的执行前后.数据的完整性要保持一致
* 3.隔离性: 一个事务的执行不应该受到其他事务的干扰
* 4.持久性: 事务一旦结束(提交或回滚)数据就持久的保持到数据库了
* 如果不考虑事务的隔离性,就会引发一些安全性的问题:
* 一类是读问题:
* 1.脏读 :一个事务读到另一个事务还没有提交数据(张森给凤姐转钱,凤姐读到后,张森回滚.)
* 2.不可重复读 :一个事务读到了另一个事务已经提交的update的数据,导致当前事务中多次查询结果不一致
* 3.虚读/幻读 :一个事务读到另一个事务已经提交的insert的数据,导致当前的事务多次的查询结果不一致.
* 一类是写问题:
* 解决引发的读问题:
* 设置事务的隔离级别:
* read uncommited :未提交读.脏读,不可重复读,虚读都可能发生.
* read committed :已提交读,避免脏读.但不可重复读和虚读有能发生.
* repeatable read :可重复读.可以避免脏读,不可重复读,但虚读有可能发生
* serializable :串行化的.避免脏读,不可重复读,虚读的发生. |
|