MySQL 事务

  • 事务

    事务是一组顺序的数据库操作,它们好像是一个工作单元一样执行。换句话说,除非组中的每个单独操作成功,否则交易将永远不会完成。如果事务中的任何操作失败,则整个事务将失败。实际上,您会将许多SQL查询组合到一个组中,并将它们作为事务的一部分一起执行。
  • 事务性质

    事务具有以下四个标准属性,通常由首字母缩写ACID引用
    • 原子性(Atomicity) - 确保工作单元内的所有操作均成功完成;否则,事务将在失败点中止,并且先前的操作将回滚到其先前的状态。
    • 一致性(Consistency) - 这可以确保数据库在成功提交事务后正确更改状态。
    • 隔离性(Isolation) - 这使事务能够独立运行并且彼此透明。
    • 持久性(Durability) - 这样可以确保在系统故障的情况下,持久化事务的结果或效果仍然存在。
    在MySQL中,事务以语句BEGIN 开始工作,以COMMITROLLBACK语句结束。开头和结尾语句之间的SQL命令构成了事务的主体。
    举个简单的例子,假设我们有一张用户金额表,有两条用户的金额记录,分别为小明的金额,和小华的金额,当小明要给小华转账时候,我们需要执行两条UPDATE SQL语句来完成这次交易,分别为小明减去一个金额和为小华加上同一个金额,这时候我们就需要用到事务,来保证操作的原子性不可分割,操作要么同时成功,要么同时失败,不能因为操作只成功一条,这时候就会造成数据的不一致。
  • 提交和回滚

    COMMITROLBACK这两个关键字主要用于MySQL 事务。成功完成事务后,应发出COMMIT命令,以便对所有涉及的表所做的更改都将生效。如果发生故障,则应发出ROLLBACK命令以使事务中引用的每个表返回其先前状态。您可以通过设置名为AUTOCOMMIT的会话变量来控制事务的行为。如果AUTOCOMMIT设置为1(默认值),则每个SQL语句(无论是否在事务中)都被视为完整事务,并在完成时默认情况下提交。当AUTOCOMMIT设置为0时,通过发出SET AUTOCOMMIT = 0命令,随后的一系列语句就像一个事务,并且在发出明确的COMMIT语句之前,不会提交任何活动。您可以使用mysqli_query()函数在PHP中执行这些SQL命令。
    事务的一般例子,事件的顺序与所使用的编程语言无关。可以使用用于创建应用程序的任何语言来创建逻辑路径。您可以使用mysqli_query()函数在PHP中执行这些SQL命令。通过发出SQL命令BEGIN WORK开始事务。发出一个或多个SQL命令,例如SELECTINSERTUPDATEDELETE。检查是否没有错误,一切都根据您的要求。如果有任何错误,则发出ROLLBACK命令,否则发出COMMIT命令。
  • MySQL中的事务安全表类型

    您不能直接使用事务,但是可以使用某些例外情况。但是,它们并不安全且不能保证。如果打算在MySQL编程中使用事务,则需要以特殊方式创建表。表有很多类型,它们支持事务,但是最流行的一种是InnoDB。 从源编译MySQL时,对InnoDB表的支持需要特定的编译参数。如果您的MySQL版本不支持InnoDB,请要求您的Internet服务提供商构建一个支持InnoDB表类型的MySQL版本,或者下载并安装适用于Windows或Linux/UNIX 的MySQL-Max Binary Distribution,并在其中使用该表类型。开发环境。如果您的MySQL安装支持InnoDB表,只需在表创建语句中添加TYPE = InnoDB定义。例如,以下代码创建一个名为tcount_tbl的InnoDB表
    root@host# mysql -u root -p password;
    Enter password:*******
    
    mysql> use mydb;
    Database changed
    
    mysql> create table tcount_tbl
       -> (
       -> tutorial_author varchar(40) NOT NULL,
       -> tutorial_count  INT
       -> ) TYPE = InnoDB;
    Query OK, 0 rows affected (0.05 sec)
    您可以使用其他表类型,例如GEMINIBDB,但它取决于您的安装,是否支持这两种表类型。