zoukankan      html  css  js  c++  java
  • MySQL事物

    MySQL

    1. ACID

    1. 原子性(atomicty):事务只能有要么提交成功与回滚失败
    2. 一致性(consistency):一个事务在执行之前和执行之后,数据库都必须处于一致性状态。若数据库运行过程中发生故障,未完成的事物不会写入数据库
    3. 持久性(durability):事务成功提交,数据会被持久化保存到数据库,之后发生操作系统故障或数据库宕机,重启数据库后,成功提交的数据仍然在数据库中
    4. 隔离性(isolation):并发环境中,并发的事务相互隔离。

    2. 设计思想

    1. Java 事务控制的基本单位:java.sql.Connection
    • 数据库本身与应用建立Connection 连接线程数量有限
    1. java.sql.Connection 重要特性
    • 线性操作 :操作时序 上,事务和事务间执行是线性依次排开执行
    • 不限执行SQL次数:建立连接后可以不限执行事物次数。连接池应用(执行完事务后不关闭事物,放进连接池)
    1. 如何执行线性操作
    • 多线程互斥访问,通过加锁 实现,一个线程中,一个事务有多个SQL操作时,要么全成功要么回滚(原子性)
    1. 连接池管理Connection
    • 管理一批Connection对象,一般会有连接数上限 设置;
    • 为每一个获取Connection请求做资源分配 ;如果资源不足,设置等待时间
    • 根据实际Connection的使用情况,为了提高系统之间的利用率,动态调整连接池中Connection对象的数量 ,如应用实际使用的连接数比较少时,会自动关闭掉一些处于无用状态的连接;当请求量大的时候,再动态创建。

    3. 隔离级别

    1. 锁库:一次只能有一个客户端对数据库访问
    2. 序列化读 (锁全表):
    • 一个客户端访问一张表时,必须在客户端对该表事务提交完成(回滚)后才能进行访问
    • 一个事务操作多张表时,任意一张表会被当作互斥资源访问
    1. 可重复读 (行级锁)
    • 同一张表同行 可以多个客户端访问
    • 幻读(insert) :一个客户端在事物执行过程中对表有插入操作 ,另一个客户端在同一个查询事物前后两次查询返回记录数不一致
    1. 读已提交(update) :读写分离的机制,读是共享锁 可以同时进行,写是互斥锁 ,同时只能有一个写资源的事务。
    • 弊端
      • 不可重复读 :有更新操作时,同一个事物内,相同的两次查询,结果不相同
      • 幻读:插入操作时,相同查询结果不同
    1. 读未提交
    • 弊端 :
      • 脏读 :客户端A读取到了客户端B要更新但还未提交的内容
      • 不可重复读:有更新操作时,同一个事物内,相同的两次查询,结果不相同
      • 幻读:插入操作时,相同查询结果不同
  • 相关阅读:
    codevs1288 埃及分数
    [BZOJ1697][Usaco2007 Feb]Cow Sorting牛排序
    [BZOJ1628][Usaco2007 Demo]City skyline
    [Usaco2005 Mar]Out of Hay 干草危机
    [Usaco2008 Open]Cow Neighborhoods 奶牛的邻居
    [BZOJ1691][Usaco2007 Dec]挑剔的美食家
    [BZOJ1668][Usaco2006 Oct]Cow Pie Treasures 馅饼里的财富
    [BZOJ1593][Usaco2008 Feb]Hotel 旅馆
    [BZOJ1637][Usaco2007 Mar]Balanced Lineup
    [BZOJ1650][Usaco2006 Dec]River Hopscotch 跳石子
  • 原文地址:https://www.cnblogs.com/luckyCoder/p/12732773.html
Copyright © 2011-2022 走看看