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中:

     

  • 相关阅读:
    浏览器图片渲染优化教程
    C#把 DataTable转换为Model实体
    .NET静态变量与静态方法并发的问题
    三种方法查看MySQL数据库的版本
    Mysql 存储引擎 InnoDB与Myisam的主要区别
    dotnet core 出现Can not find runtime target for framework '.NETCoreApp,Version=v1.6' 的解决办法
    细说 C# 中的 IEnumerable和IEnumerator接口
    ASP.NET CORE dotnet run 命令使用debug方式运行
    安装了插件情况下 强制开启火狐浏览器的多进程功能
    JSON 字符串中的中括号和大括号区别详解
  • 原文地址:https://www.cnblogs.com/457248499-qq-com/p/7374257.html
Copyright © 2011-2022 走看看