zoukankan      html  css  js  c++  java
  • 事务

    事务执行期间 抛出异常 系统自动回滚;

    设置事务回滚点 可以回滚到指定位置;

    •   conn.rollback(savePoint);
    •   conn.commit(); (这句一定要写)

    事务的四大特性:

      ACID 原子性(Atomicity) 一致性(consistency) 隔离性(Isolation) 持久性(Durability)

    • 原子性:事务是一个不可分割的工作单位,事务中的操作要么都发生,要么都不发生。
    • 一致性:事务前后数据的完整性必须保持一致。
    • 隔离性:多个用户并发访问数据库时,一个用户的事务不能被其他用户的事务所干扰
    • 持久性:一个事务一旦被提交,对数据库中数据的改变就是永久性的。

    事务的隔离级别:

    不同的隔离级别 避免不同的问题

    演示脏读:

    1. a窗口

      set transaction isolation level read uncommitted;

      select @@tx_isolation;

      start transaction;

      select * from account;

        转b窗口

      select * from account;

        发生脏读

    2. b窗口

      start transaction;

      update account set money=money+100 where name='aaa';

        转a窗口

    演示避免脏读、出现不可重复读:

    1. a窗口

      set transaction isolation level read committed;

      start transaction;

      select * from account;

        转到b窗口

      select * from account;

        转到b窗口

      select * from account;

        发生不可重复读

    2. b窗口

      start transaction;

      update account set money=money+100 where name='aaa';

        转到a窗口

      commit;

        转到a窗口

    演示避免脏读、不可重复读、出现虚读:

    1. a窗口:

      set transaction isolation level repeatable read; (MYSQL 默认隔离级别)

      start transaction;

      select * from account;

        转到b窗口

      select * from account;

        转到b窗口

      select * from account;

        转到b窗口

      select * from account;

        发生虚读

    2. b窗口:

      start transaction;

      update account set money=money+100 where name='aaa';

        转到a窗口

      commit;

        转到a窗口

      start transaction;

      insert into account(name,money) values('rrr',1000);

        转到a窗口

    READ UNCOMMITTED 读取其他事务的修改和没有提交的修改

    READ COMMITTED 读取其他事务的修改

    REPEATABLE READ 锁住事务访问的数据行 但不能防止新行的插入 会导致幻读

    SERIALIZABLE 事务串行化了 当然没啥问题了~~~

  • 相关阅读:
    Python 【第十三章】 Django 之 FORM
    Django-Model操作数据库(增删改查、连表结构)参考
    Python 【第十二章】 Django 之 Model 数据库操作
    Python 【第十一章】 Django模版
    Python 【第十章】 Django路由
    Ajax操作如何实现跨域请求 (JSONP和CORS实现Ajax跨域的原理)
    浏览器同源政策概述
    Python 【第九章】 Django基础
    python 2.7下的正则将中文分隔符去掉
    python time应用 之时间戳转换
  • 原文地址:https://www.cnblogs.com/Knuth/p/3107200.html
Copyright © 2011-2022 走看看