MySQL的事务陷阱和艺术_MySQL
作者在之前的文章 “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了。

热AI工具

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

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

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

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

热门文章

热工具

记事本++7.3.1
好用且免费的代码编辑器

SublimeText3汉化版
中文版,非常好用

禅工作室 13.0.1
功能强大的PHP集成开发环境

Dreamweaver CS6
视觉化网页开发工具

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

您是否厌倦了一直在Word文档上看到传统的黑色边框?您是否正在寻找如何为您的文档添加一些彩色和艺术边框以使其更具吸引力和乐趣的方法?在Word文档的不同页面中添加不同的艺术边框怎么样?或者一次将单个艺术边框应用于文档中的所有页面?我知道你和我们一样对这整个艺术边界的事情感到兴奋!直接阅读本文,了解如何成功地将艺术边框应用于Word文档。第1部分:如何将相同的艺术页面边框应用于Word文档中的所有页面第1步:打开Word文档,然后单击顶部功能区中的“设计”选项卡。在DESIGN选

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

大数据文摘出品作者:Caleb为庆祝英国女王伊丽莎白二世登基70周年,英国也是早早就洋溢出了庆典的味道。据了解,英国将于6月2日至5日连放4天公众假期,并在期间举行多项庆祝活动。英国皇家铸币厂也在精心打造有史以来最大的硬币,直径220毫米,重15公斤,面值15000英镑,耗时近400小时打造,是该厂1100年来生产的最大硬币。这枚金币一面雕刻着代表英国女王伊丽莎白二世的符号EⅡR,周围环绕着代表英国的玫瑰、水仙、蓟和三叶草。另一面有女王骑在马背上的图案。在这么热闹的日子里,AI当然也必须来凑一凑

MySQL事务处理:自动提交与手动提交的区别在MySQL数据库中,事务是一组SQL语句的集合,要么全部执行成功,要么全部执行失败,保证了数据的一致性和完整性。在MySQL中,事务可以分为自动提交和手动提交,其区别在于事务提交的时机以及对事务的控制范围。下面将详细介绍自动提交和手动提交的区别,并给出具体的代码示例来说明。一、自动提交在MySQL中,如果没有显示

MySQL事务的原理及应用场景在数据库系统中,事务是一组SQL操作的集合,这些操作要么全部成功执行,要么全部失败回滚。MySQL作为一种常用的关系型数据库管理系统,支持事务的特性,能够确保数据库中的数据在一致性、隔离性、持久性和原子性方面得到保证。本文将从MySQL事务的基本原理入手,介绍其应用场景,并提供具体的代码示例供读者参考。MySQL事务的原理:My

1.PDO简介PDO是PHP的一个扩展库,它提供了一个面向对象的方式来操作数据库。PDO支持多种数据库,包括Mysql、postgresql、oracle、SQLServer等。PDO使开发人员能够使用统一的api来操作不同的数据库,这使得开发人员可以在不同的数据库之间轻松切换。2.PDO连接数据库要使用PDO连接数据库,首先需要创建一个PDO对象。PDO对象的构造函数接收三个参数:数据库类型、主机名、数据库用户名和密码。例如,以下代码创建了一个连接到mysql数据库的对象:$dsn="mysq

事务确保数据库数据完整性,包括原子性、一致性、隔离性和持久性。JDBC使用Connection接口提供事务控制(setAutoCommit、commit、rollback)。并发控制机制协调并发操作,使用锁或乐观/悲观并发控制来实现事务隔离性,以防止数据不一致。

PHP数据对象(PDO)扩展提供了与数据库服务器高效且面向对象的交互。其高级查询和更新功能使开发人员能够执行复杂的数据库操作,从而提高性能和代码可维护性。本文将深入探讨PDO的高级查询和更新功能,指导您掌握其强大功能。高级查询:使用占位符和绑定参数占位符和绑定参数是提高查询性能和安全性的重要工具。占位符使用问号(?)表示查询中可替换的参数,而绑定参数则允许指定每个参数的数据类型和值。通过使用这些方法,您可以避免sql注入攻击并提高性能,因为数据库引擎可以提前优化查询。//使用占位符$stmt=$
