• mysql的事务和隔离级别


    事务的特性:

    •   原子性
    •   一致性
    •   隔离型
    •   持久性

    事务的隔离级别:

    脏读:是一个事务读到一条数据, 另一个事务同时进行修改没有提交。在一个事务中再次读的时候出现了脏读。这个是读内存的数据

    幻读 : (发生在insert中) 一个事务查询一条数据, 别一个事务新增了一条数据commit 了。 在第一个事务中再次查的时候出现先了两条,这样的就是幻读。

    不可重复读:  (发生在update和detele中) 一个事务中查询一条数据  在另一个事务中去修改或者是删除一条数据的时候,再第一个事务中读数据发生了改变。

    读未提交: read uncommitted 

    读已提交:   read committed   解决了脏读

    可重复度:  repeatable read   解决了脏读和不可重复读

    串行化读 : serializable     解决所以事务并发的问题。

    数据中  不添加锁的情况下  默认的是MVCC 确定了事务的一致性

    锁:  事务和锁是密不可分的

      锁的粒度:行锁  表锁 

      锁的模型: 共享锁  排它锁  (都是行锁)      意向共享锁  意向排它锁 (都是表锁)    

      锁的算法:  记录锁 record locks   间隙锁 gap locks    临键锁 next-key locks

          数据库中锁    临建锁 next-key locks  默认的行锁算法     临建锁里面包含了间隙锁      间隙锁 包含了记录锁

      共享锁:  又叫读锁   读锁只能读数据。 加锁的方式    select * from tableName where id= 1    LOCK   IN  share   mode

      释放锁的方式:   commit  /  rollback   这两种方式。

      实例: 如果有一个主表对应的子表。 要给主表加上共享锁, 可以不让别的事务去修改它。

      排它锁 :  又叫写锁, 是和其他事务相互排斥的, 加了这排它锁, 就不能再加其他锁, 这个可以读也可以写数据,  其他事务就不能获取该行的锁了。 

        实例: 我们的update  insert  delete  默认加上的排它锁,   手动加  : select  * from  tableName  where   id =1   FOR update;  

    数据库中锁住什么 控制了并发:

    数据库表  锁住了行中索引     锁是根据表中的索引加的, 

      如果表中有主键  发生锁住了 id索引

      如果没有主键 有唯一索引  就定上索引,  

      如果没有主键 也没有索引就是 进行表锁

     

      

  • 相关阅读:
    异常作业
    多态作业
    封装和继承作业
    类和对象作业
    多重循环、方法作业
    选择语句+循环语句作业
    数据类型和运算符作业
    初识Java作业
    C 数据结构堆
    C基础 旋转数组查找题目
  • 原文地址:https://www.cnblogs.com/yishuo/p/13736636.html
Copyright © 2020-2023  润新知