zoukankan      html  css  js  c++  java
  • mysql中事务

    事务控制语言

    什么叫做“事务”:

    想象一个场景:

    小明给小花 汇款 5000元 买 IPHONE,操作界面不用管,不管什么操作界面,最终都要落实到这样两条语句的执行:

    update  存款表  set  money = money - 5000  where  账户=’小明’;

    update  存款表  set  money = money + 5000  where  账户=’小花’;

    当,第一条语句执行成功,突然断电了(或任何其他情况),就会造成数据的“不一致”。

    要解决这个问题,就是“事务”的功能:

    事务就是用来保证多条“增删改”语句的执行的“一致性”:要么都执行完成,要么都没有执行;

    事务的特点:

    原子性:一个事务中的所有语句,应该做到:要么全做,要么一个都不做;

    一致性:让数据保持逻辑上的“合理性”,比如:一个商品出库时,既要让商品库中的该商品数量减1,又要让对应用户的购物车中的该商品加1;

    隔离性:如果多个事务同时并发执行,但每个事务就像各自独立执行一样。

    持久性:一个事务执行成功,则对数据来说应该是一个明确的硬盘数据更改(而不仅仅是内存中的变化)。

    事务模式:

    事务模式是指:

    在我们的cmd命令行模式中,是否开启了“一条语句就是一个事务”的这个开关:

    默认情况下(安装后),这个模式是开启的,称为自动提交模式”;

    set  autocommit = 1;

    这样之后,每条增删改语句,都会立即生效;

    我们可以把它关闭,那就是人为提交模式”——即需要人为提交;

    set  autocommit = 0;

    这样之后,所有增删改语句,都必须使用commit之后,才能生效;

    首先,我们以前的经验都是:一条增删改语句,一旦回车,执行就完成(前提是不出错);

    现在,我们关闭该模式:

     

    然后,再去执行一条简单的insert语句:

    对比:

    执行前:   

    然后,执行insert

    但是,再查看结果,即insert执行之后,数据并没有出现:

     

    然后,再去“人为提交”:

     

    然后,再核查数据,就有了:

     

    事务执行的基本流程

    1,开启一个事务:

    start  transaction //也可以写成:begin

    2,执行多条增删改语句; //也就是相当于希望这多条语句要作为一个“不可分割”的整体去执行的任务

    3,判断这些语句执行的结果情况,并进行提交或回滚:

    if(  没有出错 ){

    commit //提交事务;此时就是一次性完成;

    }

    else{

    rollback //回滚事务;此时就是全部撤销;

    }

    具体分2种情况来做:

    cmd中,就是凭“肉眼”观察是否有错:

    没有错误的情况:

     

    有错误的情况:

     

    在php中:

     

  • 相关阅读:
    《OD大数据实战》HDFS入门实例
    Python-操作Excel
    python操作word
    pandas操作Excel
    pyqt5-表格TableWidGet
    pyqt5-动画组QAnimationGroup
    pyqt5--动画
    pyqt5-QTDesigner--UI文件的使用方式
    pyqt5-QTDesigner--控件操作
    nodejs中cookie、session的使用
  • 原文地址:https://www.cnblogs.com/457248499-qq-com/p/7374257.html
Copyright © 2011-2022 走看看