• Mysql学习笔记(十二)


    • mysql事务测试:

        关闭自动提交事务,--查看是否自动体骄傲,1表示开启,0表示关闭。
        select @@autocommit;
        设置关闭:set autocommit =0;
        事务四个隔离级别:1-4级别越来越高。
        1.read uncommitted --读未提交
        2.read committed --读已提交
        3.repeatable read --可重复读
        4.seariable --序列化执行,串行执行。
        产生数据不一致的情况:
          脏读,补课重复读,幻读。
      
    • 测试1:脏读(读未提交)read uncommitted;

      all:set session transaction isolation level read uncommitted;
      A:start transaction;
      A:select * from psn;
      B:start transaction;
      B:select * from psn;
      A:update psn set name='zsk';
      A:select * from psn;
      B:select * from psn;//读取错误,脏读,A事务没有commit,读取到了不存在的数据。
      A:commit;
      B:select * from psn;//正确读取,A事务提交,数据永久修改。
      
    • 测试2:读已提交 read committed

      all:set session transaction isolation level read committed;
      A:start transaction;
      A:select * from psn;
      B:start transaction;
      B:select * from psn;
      A:update psn set name = 'zs' where id =1;
      B:select * from psn;//不会产生脏读,督导还是原来值,zsk;
      A:commit;
      B:select * from psn;//不可重复读,数据不一致,zs;
      
    • 测试3:可重复读repeatable read

      A:set session transaction isolation level repeatable read;
      B:set session transaction isolation level repeatable read;
      A:start transaction;
      A:select * from psn;
      B:start transaction;
      B:select * from psn;
      A:update psn set name='wangwu' where id=3;
      A:commit;//A执行提交
      B:select * from psn;//读不到wangwu,仍为zs,所以可重复读。
      B:commit;//B也执行提交。
      B:select * from psn;//读取到wangwu;
      A:start transaction;
      A:insert into psn vales(4,'s');
      B:start transaction;
      B:insert into psn vales(4,'s');//报错,提示重复逐渐,此时产生幻读。
      B:select * from psn;//只有3条数据,没有id为4的,但插不进去。
      
    • 总结:

      隔离级别        出现的异常情况
      读未提交        脏读        不可重复读        幻读
      读已提交        x           不可重复读        幻读
      可重复读        x           x                幻读
      序列化执行      x           x                x
      
      幻读指的是插入和修改数据的时候,指的是幻读,查询是不会产生。以上学习的是数据库级别的事务,掌握事务隔离级别和数据不一致的情况即可。后续学习声明式事务及事务的传播特性以及分布式事务。
      
  • 相关阅读:
    log4j的基本配置参数
    插入透明背景Flash的HTML代码
    oracle获取字符串长度函数length()和hengthb()
    HSQLDB安装与使用
    linux下完全删除Oracle
    SQL查询前几条记录
    LINUX安装ORACLE 9204 报错解决!!
    ORACLE 归档日志打开关闭方法
    hsqldb快速入门
    Openstack中查看虚拟机console log的几种方法
  • 原文地址:https://www.cnblogs.com/shaokai7878/p/16536755.html
Copyright © 2020-2023  润新知