• mysql 事务


     mysql 事务    

          在有些情况下,我们的sql语句是单一执行的,就是每条sql 语句的成功失败相互没有关联,但是有些sql 语句的执行是相关的,不如一个商城站,用户够买一个商品,那么购物车就应该添加一个条记录,而商品库存就要减少,这两条sql 语句必须同时成功才行,如果购物车有新的记录,而商品库存减少的sql 语句出错了,那么数据库的数据就出现问题的,那么可以把 这两个语句看成功一个事务,两条语句同时成功,则执行,如果有一条语句不成功则不执行。

     

    事务的原理:

    在运行一组 sql 语句之前设计一个记号备份点。

    如果sql 语句组执行成功则提交操作。

    如果执行失败则返回备份点。

     

     

     利用 innodb 存储引擎的事务日子功能!

    Innodb 在运行sql 语句是 首先是运行事务日志 如果sql 语句没有问题则自动提交给数据库。 我们要将自动提交功能关闭,如果sql语句组都没有问题则一起提交。

    如果成功提交到数据库内,一旦提交数据库就表示更改了数据库!

    Sql 语句执行分成两个阶段

    1. 执行阶段(事务日志中)

    2. 将执行的结果,提交到数据库的阶段!

    我们的事务日志  就是保存执行阶段的结果!

    如果用于选择提交,则才将执行结果提交到数据库!

    默认的执行方式 为 自动提交方式,执行完毕后自动提交。

    因此需要关闭自动提交功能!

     

    修改自动提交

    存在一个系统的变量,

    autocommit  可以对自动提交进行配置      

     

    Set autocommit=1;  表示开启自动提交

     

    Set  autocommit=0; 表示关闭自动提交

     

    关闭自动提交后,再次执行sql 语句后 ,发现在其他的连接中没有发生变化,因为结果没有被提交!

    在这个基础上执行所有的sql语句。

    判断是否都成功(出现的错误 包括 语法错误,和逻辑错误 服务器错误)。

    成功:将结果提交 利用  commit

     

    失败:回到 开始的位置 利用 rollback

     

     

    常用的事务指令:

    Start  transaction;  开启事务 

     也可以使用 start begin;

    特点是事务结束了都会自动回到 start  状态如果 start 时是关的则回到关闭状态如果是开启状态则会到开启状态。

     

    Commit; 提交         rollback;失败 

     

    事务功能只在innodb 和DBD 存储引擎下生效;

    Innodb 的并发性高于,DBD 因为innodb是行锁,DBD 为表锁。

     

    事务的特性:  

    1.原子性。  事务中的多条语句不能分开成功都成功 一条失败则都失败。

    2.一致性。  在使用事务时到事务结束时数据不能改变锁行。

    3.隔离性。 如果同时有两个事务两个事务是没有影响的。

    4.持久性。  事务提交后修改的数据不能回滚的事务前。

  • 相关阅读:
    SQL 递归查询(根据指定的节点向上获取所有父节点,向下获取所有子节点)
    限流脚本
    使用DANT做FTP的转发代理
    忘记token怎么加入k8s集群
    CentOS7.x使用overlay2文件系统
    文件已删除但句柄没有释放导致磁盘空间用完
    多线程学习(一)什么是多线程?
    自己用过的web软件tools软件以及玩过的游戏
    day1 学习历程
    git合并请求
  • 原文地址:https://www.cnblogs.com/phpshen/p/3877510.html
Copyright © 2020-2023  润新知