《mysql—事務處理》要點:
本文介紹了mysql—事務處理,希望對您有用。如果有疑問,可以聯系我們。
事務是由一系列的的sql語句組成的執行單元,主要用于處理操作量大,復雜度高的數據.
并非所有的引擎都支持明確的事務處理管理,MyISAM和InnoDB是兩種常使用的引擎,前者不支持明確的事務處理,后者支持,在創建表的時候要注意設置的引擎類型.可以通過命令show create table #表名# 來查看引擎類型,當要修改表引擎時,可以使用 alter table #表名# engine=innodb; 來實現.
事務的處理必需滿足ACID原則,也就是原子性(A)、一致性(C)、隔離性(I)、和持久性(D).
1、原子性(atomicity):事務必需數據庫的邏輯工作單元,成批的mysql語句要么全執行,要么全不執行.
2、一致性(consistency):事務在完成時,必須使所有的數據都堅持一致狀態.如果系統運行中發生故障,有些事務尚未完成被迫中斷,這些未完成的事務對數據庫所做的修改有一部分已寫入物理數據庫,此時數據庫處于一種不一致的狀態.
3、隔離性(isolation):一個事務的執行不能被其他事務干擾.即一個事務內部的操作和使用的數據對其他并發事務是隔離的,并發執行的各個事務間不能互相干擾.
4、持久性(durability):一個事物一旦提交,則它對數據庫中數據的改變是永久的.即使以后系統故障也不應該對其執行結果有任何影響.
因此,事務的ACID原則保證了事務提交后或者成功執行,或者失敗回退,二者必居其一,所以它對數據的修改具有可恢復性,當事務失敗了,數據可以恢復到該事務執行前的狀態.另外事務還可以避免語句被部分執行造成數據不一致的情況的發生.
事務的類型:系統提供的事務和用戶定義的事務.
系統提供的事務是指在執行某些sql語句時,一條語句就構成了一個事務,例如:alter table、create、delete、drop、insert、update、select...等等.
在實際應用中大量使用的是用戶定義的事務.事務的定義辦法:用begin|start transaction指定一個事務的開始,用commit或rollback語句表名一個事務的結束.必須明確指定事務的結束,否則系統將把從事務開始到用戶關閉連接之間的所有操作當成一個事務來處理.
事務術語:
事務(transaction):一組sql語句
回退(rollback):撤銷指定sql語句的過程;
提交(commit):將未存儲的sql語句結果寫入數據庫表;
保存點(savepoint):指事務處理中在某一個位置設置的臨時標記點,你可以回退到這里.對于復雜的事務處理時實現部分提交或回退.
控制事務處理:
事務開啟:start transaction | begin
保存點:savepoint #名稱#
撤退到保存點:rollback to #名稱#
回滾事務:rollback
事務提交:commit
執行回滾操作
執行事務提交操作
設置保存點回滾操作
更改默認的提交行為:
mysql行為是自動提交所有修改,也便是執行了sql語句會直接修改表的.為了mysql不自動提交更改,可以使用set autocommit=0來操作.查看默認的提交模式:show variables like 'autocommit'.在事務處理完之后再設置回來:set autocommit=1.
維易PHP培訓學院每天發布《mysql—事務處理》等實戰技能,PHP、MYSQL、LINUX、APP、JS,CSS全面培養人才。