MySQL
1. ACID
- 原子性(atomicty):事务只能有要么提交成功与回滚失败
- 一致性(consistency):一个事务在执行之前和执行之后,数据库都必须处于一致性状态。若数据库运行过程中发生故障,未完成的事物不会写入数据库
- 持久性(durability):事务成功提交,数据会被持久化保存到数据库,之后发生操作系统故障或数据库宕机,重启数据库后,成功提交的数据仍然在数据库中
- 隔离性(isolation):并发环境中,并发的事务相互隔离。
设计思想
- Java 事务控制的基本单位:
java.sql.Connection
- 数据库本身与应用建立
Connection 连接线程数量有限
-
java.sql.Connection 重要特性
-
线性操作 :操作时序 上,事务和事务间执行是线性依次排开执行
-
不限执行SQL次数:建立连接后可以不限执行事物次数。连接池应用(执行完事务后不关闭事物,放进连接池)
- 如何执行线性操作
- 多线程互斥访问,通过
加锁 实现,一个线程中,一个事务有多个SQL操作时,要么全成功要么回滚(原子性)
- 连接池管理
Connection
- 管理一批Connection对象,一般会有
连接数上限 设置;
- 为每一个获取Connection请求做
资源分配 ;如果资源不足,设置等待时间
- 根据实际Connection的使用情况,为了提高系统之间的利用率,
动态调整连接池中Connection对象的数量 ,如应用实际使用的连接数比较少时,会自动关闭掉一些处于无用状态的连接;当请求量大的时候,再动态创建。
隔离级别
- 锁库:一次只能有一个客户端对数据库访问
-
序列化读 (锁全表):
- 一个客户端访问一张表时,必须在客户端对该表事务提交完成(回滚)后才能进行访问
- 一个事务操作多张表时,任意一张表会被当作互斥资源访问
-
可重复读 (行级锁)
- 同一张表
同行 可以多个客户端访问
-
幻读(insert) :一个客户端在事物执行过程中对表有插入操作 ,另一个客户端在同一个查询事物前后两次查询返回记录数不一致
-
读已提交(update) :读写分离的机制,读是共享锁 可以同时进行,写是互斥锁 ,同时只能有一个写资源的事务。
-
弊端 :
-
不可重复读 :有更新操作时,同一个事物内,相同的两次查询,结果不相同
-
幻读:插入操作时,相同查询结果不同
读未提交
-
弊端 :
-
脏读 :客户端A读取到了客户端B要更新但还未提交的内容
-
不可重复读:有更新操作时,同一个事物内,相同的两次查询,结果不相同
-
幻读:插入操作时,相同查询结果不同
相关文章: