天天看點

MySQL——管理實務處理

​注意:并非所有的MySQL資料庫引擎都支援事務處理,MyISAM引擎不支援明确的事務處理管理,InnoDB引擎支援事務處理管理,如果應用中需要事務處理功能,一定要選用正确的引擎。​

事務處理

事務處理可以用來維護資料庫的完整性,它保證成批的MySQL操作要麼完全執行,要麼完全不執行。

一般來說,事務是必須滿足4個條件: Atomicity(原子性)、Consistency(穩定性)、Isolation(隔離性)、Durability(可靠性)

管理事務處理的關鍵在于将SQL語句組分解為邏輯快,并明确規定資料何時應該回退,何時不應該回退。

​事務進行中經常用到的幾個術語:​

1、事務:指一組SQL語句。

2、回退:指撤銷指定SQL語句的過程。

3、送出:指将未存儲的SQL語句結果寫入資料庫表。

4、保留點:指事務進行中設定的臨時占位符,可以對它釋出回退(這裡的回退與回退整個事務處理不同)。

辨別事務的開始

START TRANSACTION;      

ROLLBACK 回退、撤銷操作

ROLLBACK指令用來回退、撤銷MySQL語句。ROLLBACK語句隻能在一個事務進行中使用,即在執行一條START TRANSACTION語句到ROLLBACK語句之間的所有SQL語句。事務處理用來管理INSERT、UPDATE、DELETE語句。

注意:不能回退SELECT 語句(因為回退SELECT語句也沒有什麼實際意義),同時也不能回退CREATE、DROP操作(事務處理塊中可以使用CREATE、DROP操作,但如果執行回退,它們不會被撤銷)。

文法:

START TRANSACTION;//事務的開始

DELETE、UPDATE、INSERT語句;

ROLLBACK;//事務復原      

COMMIT送出操作

​隐含送出:​一般的MySQL語句都是直接針對資料庫表執行和編寫的,這就是隐含送出,即送出(寫或儲存)操作是自動進行的。

在事務處理塊中,送出不會隐含地進行,為進行明确的送出,必須使用COMMIT語句。

注意:當COMMIT或ROLLBACK語句執行後,事務會自動關閉(将來的更改會隐含送出)。

文法:

COMMIT;      

例如:

SELECT * FROM city;

START TRANSACTION;//事務開始

DELETE FROM WHERE id = 1001;

COMMIT;//送出事務操作      

使用保留點

建立保留點使用SAVEPOINT語句,每個保留點都必須是辨別它的唯一名字,以便在回退時MySQL知道要回退到何處,文法:

SAVEPOINT 保留點名稱;      

回退保留點使用ROLLBACK TO語句,在使用回退保留點語句時必須指明它的保留點名稱,否則無法回退,文法:

ROLLBACK TO 保留點名稱;      

注意:保留點在事務處理完成後會自動釋放(執行一條ROLLBACK或COMMIT語句後會自動釋放),從MySQL5開始,也可以明确的釋放保留點,文法:

RELEASE SAVEPOINT 保留點名稱;      

建議:個人認為保留點越多越好,這樣可以按照自己的意願靈活的進行回退。

更改預設的送出行為

MySQL預設的是自動送出所有更改,大部分情況下執行一條MySQL語句時該語句實際上都是針對表執行的,而且所做的更改立即生效。

可以訓示MySQL不自動送出更改,語句:

SET autocommit = 0;

設定值為 0(假) 表示MySQL不自動送出更改
設定值為 1(真) 表示MySQL自動送出更改      

繼續閱讀