首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

mysql_query 事务

基础概念

mysql_query 是 PHP 中用于执行 MySQL 查询的函数。然而,需要注意的是,mysql_query 函数已经在 PHP 7.0.0 中被废弃,并在 PHP 7.0.0 之后的版本中被移除。取而代之的是使用 mysqliPDO 扩展来执行 MySQL 查询。

事务(Transaction)是数据库管理系统(DBMS)执行过程中的一个逻辑单位,由一个有限的数据库操作序列构成。事务具有以下四个特性,通常称为 ACID 特性:

  1. 原子性(Atomicity):事务是一个不可分割的工作单位,事务中的操作要么都发生,要么都不发生。
  2. 一致性(Consistency):事务必须使数据库从一个一致性状态变换到另一个一致性状态。
  3. 隔离性(Isolation):事务的执行不能被其他事务干扰,即一个事务内部的操作及使用的数据对并发的其他事务是隔离的,并发执行的各个事务之间不会互相干扰。
  4. 持久性(Durability):一旦事务提交,则其结果就是永久的,即使系统崩溃也不会丢失。

相关优势

  • 数据完整性:通过事务,可以确保数据的完整性和一致性。
  • 并发控制:事务可以防止多个用户同时修改同一条记录时可能产生的问题。
  • 恢复能力:如果事务在执行过程中发生错误,可以回滚到事务开始前的状态。

类型

  • 自动提交事务:每个单独的 SQL 语句都是一个事务。
  • 显式事务:使用 BEGIN TRANSACTIONCOMMITROLLBACK 语句来明确地定义事务的开始、结束和回滚。

应用场景

  • 银行转账:确保从一个账户扣除金额和向另一个账户增加金额的操作是原子的。
  • 订单处理:确保订单创建、库存更新和支付处理等操作要么全部成功,要么全部失败。
  • 数据备份和恢复:在备份和恢复数据时,确保数据的完整性和一致性。

示例代码(使用 mysqli

代码语言:txt
复制
<?php
$servername = "localhost";
$username = "username";
$password = "password";
$dbname = "myDB";

// 创建连接
$conn = new mysqli($servername, $username, $password, $dbname);

// 检查连接
if ($conn->connect_error) {
    die("连接失败: " . $conn->connect_error);
}

// 开始事务
$conn->begin_transaction();

try {
    // 执行 SQL 语句
    $sql1 = "UPDATE accounts SET balance = balance - 100 WHERE id = 1";
    $sql2 = "UPDATE accounts SET balance = balance + 100 WHERE id = 2";

    if ($conn->query($sql1) === TRUE && $conn->query($sql2) === TRUE) {
        // 提交事务
        $conn->commit();
        echo "事务提交成功";
    } else {
        // 回滚事务
        $conn->rollback();
        echo "事务回滚";
    }
} catch (Exception $e) {
    // 发生异常时回滚事务
    $conn->rollback();
    echo "事务回滚: " . $e->getMessage();
}

// 关闭连接
$conn->close();
?>

参考链接

常见问题及解决方法

问题:事务没有按预期回滚

原因

  1. 事务没有正确开始。
  2. 事务中的 SQL 语句没有正确执行。
  3. 异常处理不当,导致回滚代码没有被执行。

解决方法

  1. 确保使用 begin_transaction 开始事务。
  2. 确保事务中的 SQL 语句正确无误。
  3. 使用 try-catch 块捕获异常并执行回滚操作。
代码语言:txt
复制
try {
    $conn->begin_transaction();
    // 执行 SQL 语句
    $conn->commit();
} catch (Exception $e) {
    $conn->rollback();
    echo "事务回滚: " . $e->getMessage();
}

通过以上方法,可以确保事务的正确执行和回滚,从而保证数据的完整性和一致性。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

  • php结合redis实现高并发下的抢购、秒杀功能的实例

    goods_id' and sku_id='$sku_id'";//解锁 此时ih_store数据中goods_id='$goods_id' and sku_id='$sku_id' 的数据被锁住(注3),其它事务必须等待此次事务...($sql,$conn); if(mysql_affected_rows()){ insertLog('库存减少成功'); } 复制代码 优化方案2:使用MySQL的事务,锁住操作的行 <?...($sql,$conn); } //模拟下单操作 //库存是否大于0 mysql_query("BEGIN"); //开始事务 $sql="select number from ih_store where...goods_id='$goods_id' and sku_id='$sku_id' FOR UPDATE";//此时这条记录被锁住,其它事务必须等待此次事务提交后才能执行 $rs=mysql_query...($sql,$conn); if(mysql_affected_rows()){ insertLog('库存减少成功'); mysql_query("COMMIT");//事务提交即解锁

    1.3K20

    程序员面试必备PHP基础面试题 – 第十九天

    五、数据库中的事务是什么? 答:事务(transaction)是作为一个单元的一组有序的数据库操作。如果组中的所有操作都成功,则认为事务成功,即使只有一个操作失败,事务也不成功。...如果所有操作完成, 事务则提交,其修改将作用于所有其他数据库进程。如果一个操作失败,则事务将回滚,该事务所有操作的影响都将取消。 六、优化MYSQL数据库的方法。...: a.保证数据完整性,例如添加和修改同时,两者成立则都执行,一者失败都失败 mysql_query("BEGIN"); mysql_query("INSERT INTO customerinfo (name...) VALUES ('$name1')"; mysql_query("SELECT * FROM `orderinfo` where customerid="....$id"); mysql_query("COMMIT"); 5、锁定表,优化事务处理: a.我们用一个 SELECT 语句取出初始数据,通过一些计算,用 UPDATE 语句将新值更新到表中。

    51810

    PHP_MySQL笔试题目一

    两者都可通过时间来设置时间长短 3.数据库中的事务是什么? 答:事务(transaction)是作为一个单元的一组有序的数据库操作。...如果组中的所有操作都成功,则认为事务成功,即使只有一个操作失败,事务也不成功。如果所有操作完成, 事务则提交,其修改将作用于所有其他数据库进程。...如果一个操作失败,则事务将回滚,该事务所有操作的影响都将取消。...: a.保证数据完整性,例如添加和修改同时,两者成立则都执行,一者失败都失败 mysql_query(“BEGIN”); mysql_query(“INSERT INTO customerinfo (...$id”); mysql_query(“COMMIT”); 5、锁定表,优化事务处理: a.我们用一个 SELECT 语句取出初始数据,通过一些计算,用 UPDATE 语句将新值更新到表中。

    76730

    MySql - InnoDB - 事务 , Php版

    /cloud.tencent.com/developer/user/1148436/activities) 1,前序 由于要重构APP(社交类) 服务端接口的部分代码,故接触到了 innoDB,以及事务这个词...2,何为事务   鄙人在编程方面的解释:多条命令操作放在一起处理 , 例如提交的时候一起提交,撤销的时候也是一起撤销,书本对这个词的定义内容很多。.../vicenteforever/articles/1613119.html,个人认为,类似于insert、update、delete 这种操作如果涉及多表或单表互联操作的情况,为了避免数据写脏,请使用事务...class Sql{ 12 public $link = null; 13 private $config = null; 14 /** 15 * 是否直接开启事务...71 72 /** 提交事务 */ 73 public function commit($getThis=false){ 74 mysql_query("COMMIT

    1.1K90

    在PHP中使用MySQL Mysqli操作数据库 ,以及类操作方法

    执行数据库事务 事务 (transaction)是作为整个一个单元的一组有序的数据库操作 。 如果一组中的所有操 作都成功 , 则认为事务成功 ,即使只有一个失败操作 , 事务也不成功 。...如果所有操作成功完 成 , 事务则提交 (commit) ,其修改将作用于所有其他数据库进程 。 如果一个操作失败 , 则事 务将回滚 (roll back),该事务所有操作的影响都将取消。...$AutoCommit); } function begin(){ /* 事务开始 */ @mysql_query("LOCK TABLES"); @mysql_query("UNLOCK...TABLES"); $this->setAutoCommit(0); mysql_query("BEGIN"); } function rollback(){ /* 回滚,继续默认的不支持事务...commit(){ /* 事务结束,继续默认的不支持事务 */ mysql_query("COMMIT"); @mysql_query("UNLOCK TABLES"); $this->setAutoCommit

    4.2K30

    java 事务嵌套_Java事务以及嵌套事务

    最近遇到事务的处理,嵌套事务,自己研究,整理一下。 1 先看结论 1、在Java事务中,事务的嵌套,如果有事务成功,那么则都成功,否则都不会成功。...结论:并行事务不存在事务影响 4.2 场景:嵌套相同事务 a) 事务嵌套,在同一个事务中,没有对异常进行处理 @RunWith(SpringJUnit4ClassRunner.class) @SpringBootTest...结论:如果事务存在异常,并进行捕获处理,不会影响事务。...4.3 场景:嵌套不同事务 a)事务嵌套,在不同事务中,没有对异常进行处理 @RunWith(SpringJUnit4ClassRunner.class) @SpringBootTest public...结论:不同事务中,嵌套的事务,没有对异常进行处理,都不会执行成功。(其实在外部事务中出错,两个也是都不会插入成功数据。)

    2.9K10

    事务

    所有的事务依次逐个执行,这样事务之间就完全不可能产生干扰,也就是说,该级别可以防止脏读、不可重复读以及幻读。...《MySQL 技术内幕:InnoDB 存储引擎(第 2 版)》7.7 章这样写到: InnoDB 存储引擎提供了对 XA 事务的支持,并通过 XA 事务来支持分布式事务的实现。...分布式事务指的是允许多个独立的事务资源(transactional resources)参与到一个全局的事务中。事务资源通常是关系型数据库系统,但也可以是其他类型的资源。...全局事务要求在其中的所有参与的事务要么都提交,要么都回滚,这对于事务原有的 ACID 要求又有了提高。...解决幻读的方式主要有以下几种: 将事务隔离级别调整为 SERIALIZABLE 。 在可重复读的事务级别下,给事务操作的这张表添加表锁。

    54820

    事务

    1.事务处理 1.事务的概念 事务是针对数据库的一组操作, 它可以由-一条或多条SQL语句组成。 2.事务的基本操作 在默认情况下,用户执行的每一条SQL语句都会被当成单独的事务自动提交。...COMMIT; 如果不想提交当前事务,可以取消事务(即回滚)。 ROLLBACK; 事务的执行要么成功,要么就返回到事务开始前的状态,这就保证了同一事务操作的同步性和数据的完整性。...MySQL中的事务必须满足A、C、I、D这4个基本特性。 Atomicity: 原子性 一个事务必须被视为一个不可分割的最小工作单元,只有事务中所有的数据库操作都执行成功,才算整个事务执行成功。...Isolation: 隔离性 隔离性是指当一个事务在执行时,不会受到其他事务的影响。保证了未完成事务的所有操作与数据库系统的隔离,直到事务完成为止,才能看到事务的执行结果。...为了保证这些事务之间不受影响,对事务设置隔离级是十分必要的。

    52930

    事务及分布式事务

    事务(Transaction)是并发控制的单位,是用户定义的一个操作序列。 这些操作要么都做,要么都不做,是一个不可分割的工作单位。 本地事务 本地事务要求符合ACID的特性: 1....Mysql的undo log记录了事务修改操作之前的数据,用于在当前事务发生回滚的时候,使该条数据状态恢复到事务开始前的状态。 2....Mysql中的Innodb引擎支持事务,有4个隔离级别: 读-未提交 读-未提交是说一个事务(假设A)可以读到其他事务(假设B)尚未提交的数据。...是一种无锁并发控制,原理是通过为事务分配单项增长的事务ID,并为每行数据保存一个版本链,版本链上的数据与修改它的事务ID相关联。...一部分是把大事务拆分为若干个小事务,将整个分布式事务T分解为n个子事务,我们命名T1,T2,...,Ti,...,Tn。每个子事务都应该、或者能被看做是原子行为。

    1.5K21

    Spring 事务和事务传播机制

    事务的回顾 在 MySQL 学习阶段,已经了解到了事务是一组操作的集合,也就是把所有的操作作为一个整体,一起向数据库提交或者撤销操作,要么同时成功,要么同时失败 一个事务的操作流程包括了,开启事务,执行事务操作...,提交事务或回滚事务,对于回滚事务来说,如果程序在执行过程中出现了错误,那么此时就需要执行回滚事务 2....编程式事务 Spring 手动操作事务和 MySQL 操作事务类似,也是分为开启事务,提交事务,回滚事务等三个操作,需要用到 DataSourceTransactionManager (事务管理器)来进行上述事务的操作...事务传播机制 事务传播机制是指在多个事务方法相互调用时,定义事务如何在这些方法之间传播的规则,也就是延用调用方法的事务还是再重新开启一个新事务 Spring 事务的传播机制有以下七种 事务传播机制 描述...B 以非事务方式执行,如果 A 有事务就抛出异常 Propagation.NESTED 如果当前存在事务,则创建一个事务作为当前事务的嵌套事务来运行。

    8910

    php面试题和答案_百度php面试题及答案

    两者都可通过时间来设置时间长短 3.数据库中的事务是什么? 答:事务(transaction)是作为一个单元的一组有序的数据库操作。...如果组中的所有操作都成功,则认为事务成功,即使只有一个操作失败,事务也不成功。如果所有操作完成, 事务则提交,其修改将作用于所有其他数据库进程。...如果一个操作失败,则事务将回滚,该事务所有操作的影响都将取消。...: a.保证数据完整性,例如添加和修改同时,两者成立则都执行,一者失败都失败 mysql_query(“BEGIN”); mysql_query(“INSERT INTO customerinfo...(name) VALUES (‘name1’)”; mysql_query(“SELECT * FROM `orderinfo` where customerid=”.id”); mysql_query

    2.7K20

    分布式事务之Spring事务与JMS事务(二)

    Spring事务 Spring事务机制主要包括声明式事务和编程式事务,声明式事务让我们从复杂的事务处理中得到解脱,编程式事务在实际开发中得不到广泛使用,仅供学习参考。...事务抽象 spring的事务管理提供了统一的API接口支持不同的资源,提供声明式事务管企且方便与Spring框架集成。...Spring在TransactionDefinition接口中规定了 7 种类型的事务传播行为,它们规定了事务方法和事务方法发生嵌套调用时事务如何进行传播: 事务传播行为类型: 事务传播行为类型 说明...PROPAGATION_REQUIRED 如果当前没有事务,就新建一个事务,如果已经存在一个事务中,加入到这个事务中。...PROPAGATION_SUPPORTS 支持当前事务,如果当前没有事务,就以非事务方式执行。 PROPAGATION_MANDATORY 使用当前的事务,如果当前没有事务,就抛出异常。

    2K10
    领券