事务控制语言(DTL)
    什么是事务
        通常,在此之前,我们说,一条语句使用一个分号(;)来结束,并得到执行。
        那么我们说,这个“一次性执行”的过程,可以称为“一个事务”。
        简单来说,“一条sql语句,就是一个事务”。
        则:
        数据库(自然包括mysql数据库)中的事务,是指,可以将“多条语句”的执行,当作“一条语句”来看到的一种内部机制。
        即:“事务”是一种可以保证“多条语句一次性执行完成”或“一条都不执行”的机制。
    为什么需要事务?
        看一个实际应用需求(银行存款):表名cunkuan
        id    账户名    存款
        1    test1    1000
        2    test2    5000
        3    test3    3000
        现在,test1突然需要一笔钱,买iPhone8,向test2借钱4000。
        银行转账:
        第一步: update  cunkuan  set 存款=存款-4000  where id=2;
        第一步做完,突然断电了!
        第二步: update  cunkuan  set 存款=存款+4000  where id=1;
        则如果没有事务,就可能发生这种事情(惨案)。
        如果有了事务,则就可以避免该事情。
        事务可以看作是一个“容器”,将多条语句,放入该容器,最后,只要一个命令行,来决定其中的所有语句是否“执行”。
    事务的特点
        原子性:一个事务中的所有语句,应该做到:要么全做,要么一个都不做;
        一致性:让数据保持逻辑上的“合理性”,比如:一个商品出库时,既要让商品库中的该商品数量减1,又要让对应用户的购物车中的该商品加1;
        隔离性:如果多个事务同时并发执行,但每个事务就像各自独立执行一样。
        持久性:一个事务执行成功,则对数据来说应该是一个明确的硬盘数据更改(而不仅仅是内存中的变化)。
    事务模式:
        事务模式:就是让每条执行语句是否当作“一个事务”来看到的设定项。

mysql默认安装好之后,其事务模式是:一条语句当作一个事务。
        比如:

原来数据:


        执行插入:


        结果:


        我们可以将其修改为:事务需要“认可”模式:
        set  autocommit = 0;        //false,关闭该模式,即此时不再是一条语句一个事务了。
        //结果是:必须使用commit语句才能够生效。

        然后插入:


        刷新:可见,没有变化。


        然后再执行commit:


        再刷新;

        注意:autocommit的设置值,只是影响通常情况下都每条语句的默认行为(自动提交还是等着commit提交)

不管autocommit的值是什么(1,0),我们也仍然可以使用事务的完整流程模式来实现事务,如下:
        事务的基本实现流程:
        1,声明事务开始:start transaction;
        2, 设定多条要执行的具体语句,比如:insert, update, delete, select。。。其实就是执行,只是这些执行的语句,并不“生效”——其只是内存状态下的执行,而不是物理状态的执行。
        3,判断是否需要执行该些语句:
        if( 判断是否有错误){
        //执行——才针对执行了物理性改变——即生效。
        commit;
        }
        eslse{
        //回滚——不执行任何语句。
        rollback;
        }
        判断是否有错误通常分这两种环境:
        1,如果是cmd中,直接观察是否出错。
        2,如果是php程序中,那就需要使用 mysql_error()函数来判断是否有错。

下来来使用事务完整转账这件事情(假设为cmd模式):
        start  transaction;
        #第一步:
        update  cunkuan  set 存款=存款-4000  where id=2;
        #第一步做完,突然断电了?
        #第二步:
        update  cunkuan  set 存款=存款+4000  where id=1;
        则如果这两条语句都没有错误,就可以:
        commit;
        但,如果其中发生了错误,则可以:
        rollback;

mysql 事物控制语言的更多相关文章

  1. mysql事物处理

    mysql事物主要用于处理操作量大,复杂度高的数据.比如说,在人员管理系统中,你删除一个人员,你既要删除人员的基本资料,也要删除和该人员相关的信息,如信箱,文章等.这样,这些数据库操作语句就构成一个事 ...

  2. MySQL事物机制具备四点:简称ACID操作

    MySQL事物机制具备四点:简称ACID操作 1.原子性:要么都做,要么都不做(两条数据(写入和存储)一步未成功,整体回滚) 2.一致性:数据库的状态改变(两条数据(写入和存储)均成功,符合原子性,但 ...

  3. php与mysql事物处理

    PHP与MYSQL事务处理 mysql事物特性 (原子性,一致性,隔离性,持久性) /*MYSQL的事务处理主要有两种方法.1.用begin,rollback,commit来实现begin 开始一个事 ...

  4. MySQL事物原理及事务隔离级别

    mysql事物 事务是访问数据库的一个操作序列,数据库应用系统通过事务集来完成对数据库的存取.事务的正确执行使得数据库从一种状态转换为另一种状态. 事务必须服从ISO/IEC所制定的ACID原则.AC ...

  5. mysql事物

    一. 什么是事务 事务就是一段sql 语句的批处理,但是这个批处理是一个atom(原子) ,不可分割,要么都执行,要么回滚(rollback)都不执行. 二.为什么出现这种技术 为什么要使用事务这个技 ...

  6. tp 5.0 mysql 事物

    mysql  默认 MyISAM存储引擎,不支持事物处理,InnoDB存储引擎提供了具有提交.回滚和崩溃恢复能力的事务安全.但是对比Myisam的存储引擎,InnoDB写的处理效率差一些并且会占用更多 ...

  7. MySQL事物(一)事务隔离级别和事物并发冲突

    数据库的操作通常为写和读,就是所说的CRUD:增加(Create).读取(Read).更新(Update)和删除(Delete).事务就是一件完整要做的事情.事务是恢复和并发控制的基本单位.事务必须始 ...

  8. PHP和Mysql事物处理

    这几天做支付的时候,又用到了事物,为了方便自己以后查看,今天闲的没事就把以前的东西整理下.(其中引用别人的东西,在这里谢谢他们贡献的代码!) 一.事务处理概述: 事务:是若干事件的集合 事务处理:当所 ...

  9. MySQL事物系列:3:innodb_flush_log_at_trx_commit小实验

    1:创建表和存储过程 mysql> create database trx; Query OK, 1 row affected (0.02 sec) mysql> USE trx Data ...

随机推荐

  1. [Noip2018普及]摆渡车

    生涯回忆录彻底摸了...反正也没啥人看( 过几天要给普及组神犇讲课就寻思做一点普及题,然后差点被锤爆,, 题在luogu上找的https://www.luogu.org/problemnew/show ...

  2. (3)Go运算符

    运算符 Go 语言内置的运算符有: 算术运算符 关系运算符 逻辑运算符 位运算符 赋值运算符 算数运算符 运算符 描述 + 相加 - 相减 * 相乘 / 相除 % 求余 注意: ++(自增)和--(自 ...

  3. Pytest权威教程04-断言的编写和报告

    目录 断言的编写和报告 使用assert语句进行断言 异常断言 警示断言 使用上下文对比 自定义断言对比信息 高级断言内省 返回: Pytest权威教程 断言的编写和报告 使用assert语句进行断言 ...

  4. Java 操作Redis封装RedisTemplate工具类

    package com.example.redisdistlock.util; import org.springframework.beans.factory.annotation.Autowire ...

  5. LArea插件选中城市,确定之后又很难再次选择城市?

    加上fastclick.js这个js就能解决这个问题啦...... 详情:http://blog.csdn.net/zfy865628361/article/details/49512095

  6. Ubuntu16.04 RYU pip命令安装

    pip命令安装方法 sudo apt install gcc python-dev libffi-dev libssl-dev libxml2-dev libxslt1-dev zlib1g-dev ...

  7. SQL Server 2012 无人值守安装

    方法1,通过指定条个參数安装   setup.exe /Q /IACCEPTSQLSERVERLICENSETERMS /ACTION=install /PID=<validpid> /F ...

  8. 【转】Android检查手机是否被root

    目前来说Android平台并没有提供能够root检查的工具.但是我们可以通过两种方式来判断 手机里面是否有su文件 这个su文件是不是能够执行 但是这两种检查方式都存在缺点. 第一种存在误测和漏测的情 ...

  9. session设置存活时间的三种方式

    在web容器中设置(此处以tomcat为例)在tomcat-5.0.28\conf\web.xml中设置,以下是tomcat 5.0中的默认配置: [html] view plain copy < ...

  10. https://docs.huihoo.com/infoq/qconbeijing/2016/day1/工程效率提升专题/2-2-支持百度万人开发的工具装备及百度工程能力建设-夏仲璞.pdf

    https://docs.huihoo.com/infoq/qconbeijing/2016/day1/工程效率提升专题/2-2-支持百度万人开发的工具装备及百度工程能力建设-夏仲璞.pdf http ...