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脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++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,該錯誤表示事務等待逾時。這個錯誤通常發生在並且

MySQL事務處理:自動提交與手動提交的差異在MySQL資料庫中,事務是一組SQL語句的集合,要麼全部執行成功,要麼全部執行失敗,保證了資料的一致性和完整性。在MySQL中,事務可以分為自動提交和手動提交,其區別在於事務提交的時機以及對事務的控制範圍。以下將詳細介紹自動提交和手動提交的區別,並給出具體的程式碼範例來說明。一、自動提交在MySQL中,如果沒有顯示

大數據摘要出品作者:Caleb為慶祝伊莉莎白二世登基70週年,英國也是早早就洋溢出了慶典的味道。據了解,英國將於6月2日至5日連放4天公眾假期,並於期間舉行多場慶祝活動。英國皇家鑄幣廠也精心打造有史以來最大的硬幣,直徑220毫米,重15公斤,面值15,000英鎊,耗時近400小時打造,是該廠1100年來生產的最大硬幣。這枚金幣一面雕刻著代表英國女王伊莉莎白二世的符號EⅡR,周圍環繞著代表英國的玫瑰、水仙、薊和三葉草。另一面有女王騎在馬背上的圖案。在這麼熱鬧的日子裡,AI當然也必須來湊一湊

1.PDO簡介PDO是PHP的擴充庫,它提供了一個物件導向的方式來操作資料庫。 PDO支援多種資料庫,包括Mysql、postgresql、oracle、SQLServer等。 PDO使開發人員能夠使用統一的api來操作不同的資料庫,這使得開發人員可以在不同的資料庫之間輕鬆切換。 2.PDO連接資料庫要使用PDO連接資料庫,首先需要建立一個PDO物件。 PDO物件的建構函式接收三個參數:資料庫類型、主機名稱、資料庫使用者名稱和密碼。例如,以下程式碼建立了一個連接到mysql資料庫的物件:$dsn="mysq

MongoDB技術開發中遇到的事務管理問題解決方案分析隨著現代應用程式變得越來越複雜和龐大,對資料的事務處理需求也越來越高。作為一種流行的NoSQL資料庫,MongoDB在資料管理方面有著出色的效能和擴展性。然而,MongoDB在資料一致性和事務管理方面相對較弱,為開發人員帶來了挑戰。在本文中,我們將探討在MongoDB開發中遇到的事務管理問題,並提出一些解

MySQL事務的原理及應用場景在資料庫系統中,事務是一組SQL操作的集合,這些操作要麼全部成功執行,要麼全部失敗回滾。 MySQL作為一種常用的關聯式資料庫管理系統,支援事務的特性,能夠確保資料庫中的資料在一致性、隔離性、持久性和原子性方面得到保證。本文將從MySQL事務的基本原理入手,介紹其應用場景,並提供具體的程式碼範例供讀者參考。 MySQL事務的原理:My

事務確保資料庫資料完整性,包括原子性、一致性、隔離性和持久性。 JDBC使用Connection介面提供交易控制(setAutoCommit、commit、rollback)。並發控制機制協調並發操作,使用鎖或樂觀/悲觀並發控制來實現事務隔離性,以防止資料不一致。
