• MySQL事务(一)


    一、基本介绍

     

    事务就是一组dml语句,这些语句存在逻辑上的相关性,这一组dml语句要么全部成功,要么全部失败,是一个整体。ACID属性(原子性,一致性,隔离性,持久性);mysql提供一种机制,保证我们可以达到这样的效果。事务还规定了不同的客户端看到的数据是不相同的, 举例说明:

    说明:  

      默认情况下,MySQL是自动提交的;

            start transaction 或 begin 语句开始一项新的事务

            commit 和 rollback 用来提交或回滚事务

            chain 和 release子句分别用来定义在事务提交或者回滚之后的操作,chain会立即启动一个新事务,并且和刚才的事务具有相同的隔离级别,release则会断开和客户端的链接;语句 commit and chain; 提交后立即开始一个新的事务

            set autocommit 可以修改当前链接的提交方式,如果设置了set autocommit=0,则设置之后的所有事务都需要通过明确的命令进行提交或回滚

            默认情况下只对提交的事务记录到二进制的日志中。

            所有的DDL语句是不能回滚的,并且部分的DDL语句会造成隐式的提交。

       默认情况下,表锁和行锁都是自动获得的,不需要额外的命令。

            lock tables 表名 [read|write] ; 锁定当前线程的表,若表被其他线程锁定,则当前线程会等待;

            unlock tables 释放当前线程获得的任何锁定

            在所锁表期间,用start transaction命令开始一个新事务,会造成一个隐含的unlock tables被执行。

     

      事务是由一组SQL语句组成的逻辑处理单元,事务具有以下4个属性,通常简称为事务的ACID属性。

    • 原子性:事务是一个原子操作单元,其对数据的修改,要么全都执行,要么全都不执行。
    • 一致性:在事务开始和完成时,数据都必须保持一致状态。这意味着所有相关的数据规则都必须应用于事务的修改,以保持数据的完整性;事务结束时,所有的内部数据结构(如B树索引或双向链表)也都必须是正确的。
    • 隔离性:数据库系统提供一定的隔离机制,保证事务在不受外部并发操作影响的“独立”环境执行。这意味着事务处理过程中的中间状态对外部是不可见的,反之亦然。
    • 持久性:事务完成后,他对数据的修改是永久性的,即使出现系统故障也能够保持。

     

    二、如何在mysql控制台使用事务

            1、创建一张表

            2、事务的基本使用

              开始一个事务

          start      transaction;

              做了一个保存点

          savepoint  保存点名;

              这里进行了各种操作[update, delete , insert ......]

              如果需要可以回退到保存点

          rollback to 保存点名;

            事务使用的注意事项:

      当我们开始事务时,没有做保存点,我们也可以回退到事务开始的哪个时候的状态(前提是,这个事务还没有提交commit)。

      

      当回退时,数据全部恢复到事务开始的时候.

           如果一个事务被提交了(即 commit),则不可以再回退

      

            我们事务中,可以有多个保存点,在回退的时候,可以选择回退到哪个保存点,同名后面的覆盖之前的定义。对于不需要的savepoint,通过release savepoint xxx;命令删除savepoint

            innodb支持事务,而myisam不支持.

            开始事务可以是 start transaction 也可以是 set autocommit= 0; 或者 begin;

            Start transaction 开始事务,事务结束后自动回到自动提交方式,即set autocommit =1;

            Start transaction 命令开启一个事务,会造成一个隐含的unlock tables被执行;

            所有的DDL语句不能回滚,并且部分的DDL语句会造成隐式提交

            通常情况下,只对提交的事务记录到二进制的日志中,但如果一个事务包含非事务类型的表,那么回滚操作也会被记录到二进制日志中,以确保非事务类型表的更新可以被复制到从数据库;

            分布式事务的使用(了解)

     

     三、如何在php程序中控制事务

     

    在没有事务的时候,代码是如此这般

     

    使用事务来控制这个问题.

  • 相关阅读:
    ZooKeeper学习第六期---ZooKeeper机制架构
    ZooKeeper学习第五期--ZooKeeper管理分布式环境中的数据
    ZooKeeper学习第四期---构建ZooKeeper应用
    ZooKeeper学习第三期---Zookeeper命令操作
    ZooKeeper学习第二期--ZooKeeper安装配置
    ZooKeeper学习第一期---Zookeeper简单介绍
    配置yum,nc,telnet
    Hadoop日记系列目录
    mysql主从复制、读写分离
    分布式事物
  • 原文地址:https://www.cnblogs.com/cshaptx4869/p/10477740.html
Copyright © 2020-2023  润新知