zoukankan      html  css  js  c++  java
  • 2019.4.1 事务和隔离级别

    数据库事务

    相关操作

    • 1.事务开始:开始一个事务,作为回滚的标记
    • 2.回滚(rollback):回滚到上一个事务开始的地方或者回滚到某个存档点 期间所有的没有被commit的操作都会被撤回
    • 3.提交(commit):将事务中所有的操作提交到数据库中
    • 4.存档点:设置存档点方便回滚

    事务的四个特性(ACID)

    • 1.原子性(Atomicity)
      • 事务包含的所有操作,要么全部成功,要么全部失败
    • 2.一致性(Consistency)(快照读)
      • 事务必须使数据库从一个一致性状态到另一个一致性状态
    • 3.隔离性(Isolation)
      • 如果有多个用户并发访问数据库,数据库的每一个用户开启的事务不能被其他事务的操作干扰
      • 多个并发事务之间应该保持相互隔离
    • 4.持久性(Durability)
      • 事务的操作一旦被提交,对于数据库的改变是永久的 即时数据库发生故障,也不能丢失已提交的数据

    代码

    关闭自动提交

    set autocommit = false ;

    开启事务

    start transaction ;

    begin ;

    存档

    savepoint save;

    回滚

    rollback to save;

    提交

    commit ;

    三个隔离性问题

    • 1.脏读:一个事务读取了未提交事务执行过程中的数据
    • 2.不可重复读:对于数据库中的某个数据 一个事务执行过程中多次查询返回不同结果
    • 3.幻读(虚读):对于一个事务批量修改数据的时候,另外的事务插入一条新的数据,在第一个事务中执行了操作缺没有将所有情况的数据都进行修改

    四个隔离级别

    • 1.RU(Read Uncommitted)
      读取未提交内容,所有事务都可以看到其他事务的未提交内容
    • 2.RC(Read Committed)
      读取提交内容,,可以避免脏读 但是无法避免可重复读和幻读
    • 3.RR(Repeatable Read)
      可重复读 MySQL默认的隔离级别 可以避免脏读和可重复读 但是不能避免幻读
      通过Innodb引擎多版本并发控制
    • 4.Serializable 串行化
      最高的隔离级别 强制所有的事务排序执行,性能上会出现问题 会出现大量的超时和锁竞争

    隔离级别的实现

    • 1.读锁和写锁
      • 共享锁:数据库的读锁,一旦加上该锁,其他用户只能读不能写
      • 排它锁:写锁 一旦给表或者行加上写锁 其他用户不能读也不能写
    • 2.行锁和表锁

    数据库设计三大范式

    • 第一范式---保证列不能拆分
      • 数据库表中的每一字段都是不能继续拆分的最小单元
    • 第二范式---一个表只描述一个事
      • 满足第一范式之后(1NF),表中的每一列都必须依赖主键
    • 第三范式---使用外键做表之间的关联
      • 满足2NF,表中所有的列只与主键直接相关而不是间接相关
  • 相关阅读:
    java生成UUID通用唯一识别码 (Universally Unique Identifier)
    使用ToolRunner运行Hadoop程序基本原理分析
    Hadoop入门经典:WordCount
    Hadoop配置文件
    【Nutch2.2.1基础教程之3】Nutch2.2.1配置文件
    8大排序算法图文讲解
    动态字典树_前缀相互查找(HDU_1671)
    DP_基本DP+排序(HDU_1421)
    斯特灵公式
    七种 qsort 排序方法
  • 原文地址:https://www.cnblogs.com/lzb1234/p/10636919.html
Copyright © 2011-2022 走看看