• MySQL事务测试


    1.打开win+R,输入cmd,输入mysql -uroot -p回车,输入密码。关闭自动提交事务。

    --查看是否是自动提交 1表示开启,0表示关闭
    select @@autocommit;
    --设置关闭
    set autocommit = 0;

    2.数据准备

    --创建数据库
    create database tran;
    --切换数据库 两个窗口都执行
    use tran;
    --准备数据
     create table psn(id int primary key,name varchar(10)) engine=innodb;
    --插入数据
    insert into psn values(1,'zhangsan');
    insert into psn values(2,'lisi');
    insert into psn values(3,'wangwu');
    commit;

     

    这个我们开两个会话窗口进行测试。分别为a、b两个窗口。

     

    3.测试1: read uncommitted(读未提交)

    --a:
    set session transaction isolation level read uncommitted;
    --b:
    set session transaction isolation level read uncommitted;

    --a:
    --开始事务
    start transaction;
    select * from psn;
    update psn set name='zhaoliu';
    selecet * from psn
    --b:
    start transaction;
    select * from psn;

    b读取的结果zhaoliu。产生脏读,因为a事务没有commit,读取到了不存在的数据

    --a:
    --提交事务
    commit;
    --b:
    select * from psn;

    b读取的数据是zhaoliu,因为a事务已经commit,数据永久的被修改。

     

    4.测试2:read committed

    --a:
    set session transaction isolation level read committed;
    start transaction;
    select * from psn;
    --b:
    set session transaction isolation level read committed;
    start transaction;
    select * from psn;

    执行到这里两个窗口的数据是一致的。

    --a:
    update psn set name ='tianqi' where id = 1;
    select * from psn;
    --b:
    select * from psn;

    执行到此处两个窗口的数据不一致,b窗口中读取不到更新的数据

    --a:
    commit;
    select * from psn;
    --b:
    select * from psn;

    5.测试3:repeatable read

    --a:
    set session transaction isolation level repeatable read;
    start transaction;
    select * from psn;
    --b:
    set session transaction isolation level repeatable read;
    start transaction;
    select * from psn;
    --此时两个窗口的数据是一致的
    --a:
    insert into psn values(4,'zhouba');
    commit;
    select * from psn;
    ​
    --b:
    select * from psn;
    --读取不到添加的数据
    insert into psn values(4,'zhouba');
    --报错,无法插入数据
    --此时发现读取不到数据,但是在插入的时候不允许插入,出现了幻读,设置更高级别的隔离级别即可解决

     

    6.测试事务

    --事务包含四个隔离级别:从上往下,隔离级别越来越高,意味着数据越来越安全
    read uncommitted;   --读未提交
    read commited;      --读已提交
    repeatable read;    --可重复读
    serializable        --序列化执行,串行执行
    /*
      产生数据不一致的情况:
      脏读
      不可重复读
      幻读
    */

    四种隔离级别会造成的异常情况:

    隔离级别异常情况异常情况异常情况
    读未提交 脏读 不可重复读 幻读
    读已提交   不可重复读 幻读
    可重复读     幻读
    序列化      
  • 相关阅读:
    Text Rendering in the QML Scene Graph
    freetype2文档部分翻译
    一些距离测算方法
    制作交叉工具链
    图像处理链接
    Scene Management scene graph
    Google的九条创新原则
    C#颜色和名称样式对照表【转载】
    sql语句性能优化【转载】
    数据挖掘十大经典算法【转载】
  • 原文地址:https://www.cnblogs.com/nyfq/p/14362599.html
Copyright © 2020-2023  润新知