zoukankan      html  css  js  c++  java
  • mysql基础知识(2)

    1、mysql事务

    mysql中,事务其实是一个最小的不可分割的工作单元,事务能够保证一个业务的完整性

    在开发中,可能会遇到有多条sql语句要求同时成功或者失败的情况

    比如银行转帐:a转账给b,就会执行两条sql语句,这两条sql语句是一个整体,要么都执行成功,要么都执行失败,如果出现两条语句执行结果不一致的情况,就会造成数据的错误的现象

    a——> -100

    update user set money = money-100 where name='a';

    b——> +100

    update user set money = money +100 where name='b';

    2、mysql中如何控制事务?

    (1)mysql中默认是开启事务的(自动提交的状态就是表示自动开启的:@@autocommit)

    select @@autocommit;

    (2)默认事务开启的作用是什么?

    当我们去执行一个sql语句的时候,效果会立即的体现出来,且不能回滚

    事务回滚rollback:撤销SQL语句的执行效果

    若关闭事务的自动提交功能,即可实现回滚:set autocommit=0;

    手动开启事务也可以实现回滚的操作:begin或者start transaction;表示手动开启事务

    事务开启后(包括自动开启和手动开启),一旦commit提交就不能在回滚

    (3)事务的ACID特征与使用

    事务的四大特征:

    A 原子性:事务是最小的单位,不可再分割

    C 一致性:事务要求,同一事务中的sql语句,必须保证同时成功或者同时失败

    I  隔离性:事务1和事务2之间是具有隔离性的

    D 持久性:事务一旦结束(commit,rollback),就不可以返回

    手动开启事务两步 :

    (1)修改默认提交set antocommit = 0;(2)begin或者start transaction;

    手动提交事务:

    commit;

    手动回滚事务:

    rollback;

    (4)事务隔离性分析:

    如何查看事务的隔离级别:

    mysql  8.0版本:

    系统级别:select @@global.transaction_isolation;

    会话级别:select @@transaction_isolation;

    mysql 5.0版本;

    系统级别:select @@global.tx_isolation;

    会话级别:select @@tx_isolation;

    如何修改隔离级别:

    set global transaction isolation level 隔离级别(如read uncommitted);

    四种隔离级别:

    (a)read uncommitted ——读未提交;如果有事务a和事务b,若在操作的过程中事务没有被提交,但是事务b能看见事务a操作的结果

    (这种隔离机制是有问题的,如果两个不同的地方都在进行操作,如果事务a开启(没有提交)后他的数据可以被其他事务读取到,这样就会出现脏读(脏读:一个事务读取到另一个事务没有提交的数据))

    (b)read committed ——读已经提交;出现不可重复读的问题

    (c)repeatable read ——可以重复读;出现幻读的问题,事务a与事务b同时操作一张表,事务a提交了数据,但是a提交的数据不能被事务b读到

    (d)serializable ——串行化;当数据表被一个事务操作的时候,其他事务里面的写操作是不可以进行的,其他事务进入等待状态(串行化),直到正在操作的事务结束后且在没有等待超市的情况下,在排队的事务才可以进行写操作。这种情况就造成了串行化的隔离级别性能差

    四种隔离级别性能比较:read uncommitted>read committed >repeatable read >serializable 

    *mysql默认的隔离级别是:repeatable read

    日积月累
  • 相关阅读:
    知识点总结(基础篇)
    从FBV到CBV三(权限)
    从FBV到CBV二(认证器)
    kubeDNS workflow(service registration and discovery)
    从FBV到CBV一(开始)
    pycharm的python console报错CE.app/Contents/helpers/pydev/_pydev_bundle/pydev_ipython_console_011.py", line 87, in init self.matchers.remove(self.python_matches) ValueError: list.remove(x): x not in list
    删除none 的images报错 image has dependent child images 解决办法
    缓存的应用场景以及要注意的问题
    epoll—IO多路复用
    docker 容器启动后立马退出的解决方法
  • 原文地址:https://www.cnblogs.com/qiumh/p/13089605.html
Copyright © 2011-2022 走看看