热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

mysql用事务删除sql执行_mysql事务处理,执行sql1成功,执行sql2失败,但是没有rollbacksql1...

测试了一下,表类型是innoDB,这条记录的quantity为unsign类型的初始值是1。因此,$sql数组中的第一条执行成功ÿ

测试了一下,表类型是 innoDB,这条记录的 quantity为 unsign 类型 的初始值是1。因此,$sql 数组中的第一条执行成功,当第二条执行时,执行失败,两条 sql 应该都退回才对。

$db = new mysqli('localhost', 'root', '', 'test');

$sql = array(

'UPDATE `crm_stock_goods` SET quantity=quantity-1 WHERE rec_id=2470',

'UPDATE `crm_stock_goods` SET quantity=quantity-1 WHERE rec_id=2470',

);

echo '开始
';

$db->query('START TRANSACTION');

foreach ($sql as $val) {

echo $val,'
';

if (!$db->query($val)) {

$db->query('ROLLBACK');

echo '退回
';

}

}

$db->query('COMMIT');

echo '结束';

执行结果在显示上,也确实 echo 出了‘退回’,但是数据库中 quantity 却被减掉了1,变成了 0

3cafd2ae05cafec067946a620f9ea23b.png

请问是我代码哪里写错了吗?

说一下我的理解吧。

我修改了题主的代码,让在这个代码中SQL的执行更加清晰了一些,大概是这个样子:

error_reporting(E_ERROR);

$db = new mysqli('127.0.0.1', 'root', '', 'test');

$sql = array(

'UPDATE `crm_stock_goods` SET quantity=quantity-1 WHERE rec_id=2470',

'ROLLBACK',

'UPDATE `crm_stock_goods` SET quantity=quantity-1 WHERE rec_id=2470',

'ROLLBACK',

'COMMIT'

);

echo '开始
';

$db->query('START TRANSACTION');

foreach ($sql as $val) {

echo $val, '
';

$db->query($val);

}

$db->query('COMMIT');

echo '结束';

可以看到,在第一次SQL执行错误之后,事务就已经回滚了。这时候,事务已经结束了,所以后面执行的SQL不会回滚。

个人的一些理解,欢迎补充。

通过对比:

$db->query('START TRANSACTION');

$db->query('BEGIN');

$db->query('SET AUTOCOMMIT=0');

这三条语句,我发现,当使用前两条中的任一条时,quantity 都会变成0,

当使用 $db->query(‘SET AUTOCOMMIT=0’); 时,quantity 没有变化,1还是1

求指点



推荐阅读
  • Maven + Spring + MyBatis + MySQL 环境搭建与实例解析
    本文详细介绍如何使用MySQL数据库进行环境搭建,包括创建数据库表并插入示例数据。随后,逐步指导如何配置Maven项目,整合Spring框架与MyBatis,实现高效的数据访问。 ... [详细]
  • 本文探讨了异步编程的发展历程,从最初的AJAX异步回调到现代的Promise、Generator+Co以及Async/Await等技术。文章详细分析了Promise的工作原理及其源码实现,帮助开发者更好地理解和使用这一重要工具。 ... [详细]
  • 本文探讨了如何在PHP与MySQL环境中实现高效的分页查询,包括基本的分页实现、性能优化技巧以及高级的分页策略。 ... [详细]
  • H5技术实现经典游戏《贪吃蛇》
    本文将分享一个使用HTML5技术实现的经典小游戏——《贪吃蛇》。通过H5技术,我们将探讨如何构建这款游戏的两种主要玩法:积分闯关和无尽模式。 ... [详细]
  • 本文详细介绍了Oracle 11g中的创建表空间的方法,以及如何设置客户端和服务端的基本配置,包括用户管理、环境变量配置等。 ... [详细]
  • 本文介绍了SIP(Session Initiation Protocol,会话发起协议)的基本概念、功能、消息格式及其实现机制。SIP是一种在IP网络上用于建立、管理和终止多媒体通信会话的应用层协议。 ... [详细]
  • 二维码的实现与应用
    本文介绍了二维码的基本概念、分类及其优缺点,并详细描述了如何使用Java编程语言结合第三方库(如ZXing和qrcode.jar)来实现二维码的生成与解析。 ... [详细]
  • 解决JavaScript中法语字符排序问题
    在开发一个使用JavaScript、HTML和CSS的Web应用时,遇到从SQLite数据库中提取的法语词汇排序不正确的问题,特别是带重音符号的字母未按预期排序。 ... [详细]
  • 本文详细介绍了如何正确设置Shadowsocks公共代理,包括调整超时设置、检查系统限制、防止滥用及遵守DMCA法规等关键步骤。 ... [详细]
  • 本文探讨了如何通过Service Locator模式来简化和优化在B/S架构中的服务命名访问,特别是对于需要频繁访问的服务,如JNDI和XMLNS。该模式通过缓存机制减少了重复查找的成本,并提供了对多种服务的统一访问接口。 ... [详细]
  • 如何在PHP中安装Xdebug扩展
    本文介绍了如何从PECL下载并编译安装Xdebug扩展,以及如何配置PHP和PHPStorm以启用调试功能。 ... [详细]
  • 本文详细介绍了在Linux操作系统上安装和部署MySQL数据库的过程,包括必要的环境准备、安装步骤、配置优化及安全设置等内容。 ... [详细]
  • Docker安全策略与管理
    本文探讨了Docker的安全挑战、核心安全特性及其管理策略,旨在帮助读者深入理解Docker安全机制,并提供实用的安全管理建议。 ... [详细]
  • MySQL InnoDB 存储引擎索引机制详解
    本文深入探讨了MySQL InnoDB存储引擎中的索引技术,包括索引的基本概念、数据结构与算法、B+树的特性及其在数据库中的应用,以及索引优化策略。 ... [详细]
  • 在尝试通过自定义端口部署Spring Cloud Eureka时遇到了连接失败的问题。本文详细描述了问题的现象,并提供了有效的解决方案,以帮助遇到类似情况的开发者。 ... [详细]
author-avatar
手机用户2502937497
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有