MySQL的事務陷阱和藝術,mysql事務陷阱

來源:互聯網
上載者:User

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);-- 建立儲存點 tableAupdatedSAVEPOINT tableAupdated;-- 增加 tableB 的記錄INSERT INTO tableB VALUES (4,5,6);-- 反正發生了些什麼不愉快的事,要取消對 tableB 所做的更新...ROLLBACK TO tableAupdated;-- 這時候提交,就只有 tableA 被更新了COMMIT;

當然, 也可以設定多個儲存點標識符(SAVEPOINT identifiers), 並且在事務中復原到任意一處。

也可以刪除一個儲存點,文法如下:

RELEASE SAVEPOINT savepointName;

只要事務提交或者(整個)復原,那麼所有的儲存點都會被刪除。

事務和儲存點的使用非常簡單,能有效保護 InnoDB 中重要的資料。你還有什麼理由堅持使用 MyISAM 呢,現在MyISAM的效率也不如InnoDB了。

注意: 想要訂閱更多資訊嗎?

你可以 訂閱 Tech Times 每周的 tech geek newsletter。

GitHub版本: https://github.com/cncounter/translation/blob/master/tiemao_2015/17_MySQL_Savepoint/MySQL_Savepoint.md

原文連結: http://www.sitepoint.com/mysql-transaction-gotchas-good-parts/

作者: 鐵錨 http://blog.csdn.net/renfufei

日期: 2015年06月29日

相關文章

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.