zoukankan      html  css  js  c++  java
  • TCL--事物隔离级别--演示

    数据库的隔离级别:
    同时运行多个事物,访问数据库中相同数据,没有采取必要的隔离机制,就会导致各种并发问题
    类似多线程的线程安全,五个人同时上一个厕所,所以要启用加锁的方式,实现线程同步,解决

    脏读:两个事物:t1、t2,t2更新还没提交的字段被t1读取了,t1读到的内容就是临时无效的
    例如:被记者曝光我以后的财富,上一秒一万个亿,其实我已经有两万个亿了。更新

    不可重复读:对于两个事物t1、t2,t1读取了一个字段,t2更新了,t1再次读取同一个字段,值不同
    例如:网卡了查询余额,开始有1000后来只有500。修改

    幻读:对于两个事物t1、t2,t1从一个表中取出一个字段,t2插入一些数据之后,t1再读多出几行
    例如:三行变五行。插入

    可以通过设计


    #1.停止MySQL
    C:WINDOWSsystem32>net stop mysql
    #2.启动MySQL
    C:WINDOWSsystem32>net start mysql
    #3.登录MySQL
    C:WINDOWSsystem32>mysql -uroot -pROOT

    #4.查看默认隔离级别
    mysql> select @@tx_isolation

     


    #5.设置隔离级别为最低的:读未提交

    #6.重复第4步,查看默认级别

    #7.打开test库

    #8.查看表中数据

    #9.修改表中姓名列的字符集
    set names gbk;//好像是因为name有多个所以要加s,用name报错

    #10.再去查看表中的数据

     #11.开启事物

    #12.修改1号的名字

    这个时候事物开起了,没有结束语句,数据还在内存中没有提交到硬盘

    #13.在开启一个cmd命令行

     -p时不输入密码回车,就可以把密码隐藏起来

    #14.查看默认隔离级别

     #15.设置隔离级别为最低的,并查看

    #16.打开数据库,开启事物

     

     #17.查看account表的数据

    #18.设置字符集

     #19.再查看表中的数据

     这时候,张无忌的名字已经被改为John,实际上没有提交。这时候就把这种情况命名为:脏读

    #20.事物回滚

     #21.再去查看

     这种显现被称为:不可重复读(结果不一样)

    幻读也无法避免

    #提交事物结束上一个事物
    两个都要提交commit


    #设计事物隔离级别第2级别:读已提交

    set session transaction isolation level read committed;

    #2.开启事物

     

     #3.再去修改1的名字

     #提交事物结束上一个事物

    #4.设置另一个事物的级别为二级

     #5.开启事物

     #6.查询数据

     避免了脏读,不可重复读和幻读没有避免

    #7.验证,提交事物 

     #8.再查询两次结果不一样:不可重复读就出现了

     #9.提交结束事物

     #设计事物隔离级别第3级别:可重复读

    set session transaction isolation level repeatable read;

     

     #2.查看表中的数据

     #3.开启新事物

     #4.把张飞改为刘备

     #5.开启一个新事物

     #6.查看表中的数据

     发现:张飞没有变成刘备,避免了脏读

    #7.提交

     #8.再查询

     #9.提交

     #10.再开一个事物

     这时候才是最新的数据,这时候就解决了 脏读,不可重复读。幻读就没解决

    幻读演示

    #1.查询事物隔离级别

     #2.开启一个事物

     #3.结束上一个事物,开启一个事物,查询原表的数据

     #4.插入一条数据

     #5.提交

    6.修改名字,发现三行受影响。这时候幻读就发生了

    事物隔离级别第4级别:串行化,性能非常低,慎用

    最高隔离级别解决所有并发问题

    set session transaction isolation level serializable;

     

     #2.开启一个事物,并查看表中的数据

    #3.开启,另一个事物,插入数据。这时没有反映

     像java的多线程,阻塞了,被锁在外面了。无法对数据进行操作

    这边修改完毕

    正常的提交

    等待超时

  • 相关阅读:
    [LeetCode]Power of N
    uboot学习之uboot启动流程简述
    [LeetCode]Palindrome Pairs
    [LeetCode]Gray Code
    快速排序 partition函数的所有版本比较
    Linked List Cycle && Linked List Cycle II
    Simplify Path leetcode
    Pow(x, n) leetcode
    Swap Nodes in Pairs leetcode
    Multiply Strings leetcode
  • 原文地址:https://www.cnblogs.com/rijiyuelei/p/12381253.html
Copyright © 2011-2022 走看看