作者在之前的文章 “MySQL事务及为何不能在PHP模仿事务” 里面, 详细说明了事务的优点,并介绍了一些简单的SQL命令,使得应用程序更加健壮。但在web程序员的生命旅程中并没有多少事情是看起来那样简单的。。。。。
不能回滚的语句(Statements you can’t ROLLBACK)
很遗憾滴通知你, 并不是所有的数据库操作都支持回滚( ROLLBACK ) 。如果你更改数据库/表结构(schema), 所有当前事务都会被提交, 而升级(alteration )将会在其独有的事务中运行(不属于任何客户端事务)。这些语句包括:
CREATE DATABASE ALTER DATABASE DROP DATABASE CREATE TABLE ALTER TABLE DROP TABLE RENAME TABLE TRUNCATE TABLE CREATE INDEX DROP INDEX CREATE EVENT DROP EVENT CREATE FUNCTION DROP FUNCTION CREATE PROCEDURE DROP PROCEDURE我们不能撤消数据库根本上的变化, 例如:
START TRANSACTION; DROP TABLE MyImportantData; -- 所有事务会被强制提交, existing (empty) transaction is COMMIT-ed -- 然后该表就被永久地删除了(table is dropped permanently) ROLLBACK; -- 没机会了,数据已经不要你了. no chance, mate - your data's gone
提示: 临时表(TEMPORARY)
创建、升级和删除(CREATE, ALTER, and DROP)临时表并不会引起隐式提交(implicit COMMIT. )。当然,这些操作也是不能回滚的。
保存点(Savepoint)
我们对异常那是爱之深责之切,那么让我们来看看另一个设计优美的部分。保存点(Savepoint)是事务中有效的命名位置。你可以回滚到某个保存点而不影响改点之前的SQL更新。。。有点像Photoshop中的历史面板。
最简单的方法,我们一起来看个示例:
START TRANSACTION; -- 增加 tableA 的记录 INSERT INTO tableA VALUES (1,2,3); -- 创建保存点 tableAupdated SAVEPOINT tableAupdated; -- 增加 tableB 的记录 INSERT INTO tableB VALUES (4,5,6); -- 反正发生了些什么不愉快的事,要取消对 tableB 所做的更新... ROLLBACK TO tableAupdated; -- 这时候提交,就只有 tableA 被更新了 COMMIT;
当然, 也可以设置多个保存点标识符(SAVEPOINT identifiers), 并且在事务中回滚到任意一处。
也可以删除一个保存点,语法如下:
RELEASE SAVEPOINT savepointName;
只要事务提交或者(整个)回滚,那么所有的保存点都会被删除。
事务和保存点的使用非常简单,能有效保护 InnoDB 中重要的数据。你还有什么理由坚持使用 MyISAM 呢,现在MyISAM的效率也不如InnoDB了。

Lockwaittimeoutexceeded;tryrestartingtransaction-如何解决MySQL报错:事务等待超时在使用MySQL数据库时,有时可能会遇到一个常见的错误:Lockwaittimeoutexceeded;tryrestartingtransaction,该错误表示事务等待超时。这个错误通常发生在并

MongoDB技术开发中遇到的事务管理问题解决方案分析随着现代应用程序变得越来越复杂和庞大,对数据的事务处理需求也越来越高。作为一种流行的NoSQL数据库,MongoDB在数据管理方面有着出色的性能和扩展性。然而,MongoDB在数据一致性和事务管理方面相对较弱,给开发人员带来了挑战。在本文中,我们将探讨在MongoDB开发中遇到的事务管理问题,并提出一些解

学习MySQL的事务处理技巧有哪些?引言:事务是数据库管理系统中非常重要的概念,它提供了一种保证数据完整性和一致性的机制。在MySQL中,事务是一组SQL语句的执行单元,可以保证这组SQL语句要么全部执行成功,要么全部执行失败回滚。本文将介绍学习MySQL的事务处理技巧,并给出相应的代码示例。开启事务:在MySQL中,可以使用BEGIN、STARTTRAN

STL函数对象使用陷阱:不可修改函数对象的状态,否则可能导致后果或崩溃。函数对象应作为右值使用,左值使用会导致未定义行为。捕获局部变量时应确保捕获所有引用的变量,否则可能导致崩溃。

避免无界递归:设置递归基线,明确停止条件。优化递归效率:考虑使用循环或迭代代替深度递归调用。预防栈溢出:控制递归深度,利用优化技术或辅助数据结构。禁止修改传入参数:传递值副本或使用全局变量存储递归结果。实战示例:通过优化fibonacci()函数阐述最佳实践应用。

如何解决:Java数据库错误:事务操作异常引言:在Java开发中,使用数据库进行数据的存储和操作是常见的任务之一。然而,有时候我们会遇到事务操作异常的错误,这可能会导致数据不一致或操作失败。本文将介绍如何解决Java数据库错误中的事务操作异常,并提供相关的代码示例。一、什么是事务操作异常?事务是指数据库中的一组操作,这些操作要么全部成功地执行,要么全部回滚。

MySQLMVCC原理揭秘:如何处理并发事务的读写冲突?引言:在数据库系统中,事务的并发执行是必不可少的。然而,并发执行也带来了一系列的问题,其中之一就是读写冲突。当多个事务同时读写同一个数据时,就可能出现不一致的情况。为了解决这个问题,MySQL引入了多版本并发控制(MVCC)机制。本文将揭秘MVCC的原理,详细解析MySQL是如何处理并发事务的读写冲

PHP持续集成和持续交付(CI/CD)的实施对于现代WEB开发至关重要,可以显著提高软件开发和部署的效率和质量。然而,在这一过程中也存在一些常见的陷阱,如果不及时解决,可能会阻碍团队实现CI/CD流程的全部好处。本文着重介绍这些陷阱并提供实用的解决方法,从而为phpCI/CD管道建立一个稳固的基础。1.脚本维护不善在CI/CD管道中,自动化脚本是执行任务和验证构建的基石。然而,如果没有适当的维护,这些脚本可能会变得陈旧或失效。解决方法:将脚本保存在版本控制系统中,例如git。定期回顾和更新脚本,


热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

AI Hentai Generator
免费生成ai无尽的。

热门文章

热工具

ZendStudio 13.5.1 Mac
功能强大的PHP集成开发环境

安全考试浏览器
Safe Exam Browser是一个安全的浏览器环境,用于安全地进行在线考试。该软件将任何计算机变成一个安全的工作站。它控制对任何实用工具的访问,并防止学生使用未经授权的资源。

适用于 Eclipse 的 SAP NetWeaver 服务器适配器
将Eclipse与SAP NetWeaver应用服务器集成。

WebStorm Mac版
好用的JavaScript开发工具

Atom编辑器mac版下载
最流行的的开源编辑器