MySQL數據庫8(二十一)事務

事務安全

事務概念

l  Transactionmysql

l  事務:一個最小的不可再分的工做單元;一般一個事務對應一個完整的業務(例如銀行帳戶轉帳業務,該業務就是一個最小的工做單元)程序員

l  一個完整的業務須要批量的DML(insert、update、delete)語句共同聯合完成sql

l  事務只和DML語句有關,或者說DML語句纔有事務。這個和業務邏輯有關,業務邏輯不一樣,DML語句的個數不一樣數據庫

 

事務由事務開始到事務結束之間執行的全體操做組成。安全

  • 開啓事務:Start Transaction
  • 事務結束:End Transaction
  • 提交事務:Commit Transaction
  • 回滾事務:Rollback Transaction

 

事務基本原理

基本原理:mysql容許將事務統一進行管理(存儲引擎innodb),將用戶所作的操做暫時保存起來,不直接放到數據表(更新),等到用戶確認結果以後再進行操做。服務器

 

事務在mysql中一般是自動提交的,可是也是可使用手動事務併發

 

自動事務

自動事務:autocommit ,當客戶端發送一條SQL指令(寫操做:增刪改)給服務器的時候,服務器在執行以後,不用等待用戶反饋結果,會自動將結果同步到數據表。atom

 

證實:打開兩個客戶端,一個客戶端執行SQL指令,另外一個客戶端查看執行結果。spa

 

自動事務:系統作了額外的步驟來幫助用戶操做,系統是經過變量來控制的。autocommit3d

 

關閉自動事務:關閉以後系統就不在幫助用戶提交結果了。

set autocommit = off;

 

 

查看執行結果

 

 

 

一旦自動事務關閉,那麼須要用戶提供是否同步的命令

Commit:提交(同步到數據表,事務會被清空)

Rollback:回滾(清空以前的操做,不要了)

 

事務沒有提交的對比查看:在執行事務端的客戶端中,系統在進行數據查看的時候會利用事務日誌進行數據加工。

 

事務提交

 

一般,咱們不會關閉自動事務,這樣操做麻煩。所以只會在須要使用事務處理的時候,纔會進行操做(手動事務)

 

手動事務

手動事務:不論是開始仍是過程仍是結束,都須要用戶(程序員)手動發送對應的事務操做指令來實現。

 

手動事務的命令:

一、start transaction; 開啓事務:從這條語句開始,後面的全部語句都不會直接寫入到數據表(保存在事務日誌中)

二、事務處理:多個指令構成

三、事務提交:commit/rollback,到這個時候全部的事務纔算結束

開始事務

 

 

執行事務

將多個連續的可是是一個總體的SQL指令,逐一執行。

 

提交事務

確認提交:commit,數據寫到數據表,清空事務日誌

 

回滾操做:rollback,全部數據無效並清空

 

回滾點

回滾點:savepoint,當有一系列的事務操做時,而其中的步驟若是成功了沒有必要從新來過,那麼能夠在某個成功點設置一個記號(回滾點),若是後面有失敗,那麼能夠回到這個記號位置。

 

回滾點在自動事務關閉後才能使用。set autocommit = off;

一、增長回滾點:savepoint 回滾點名字; //字母數字和下劃線構成

二、回到回滾點:rollback to 回滾點名字;  //那個記號(回滾點)以後的全部操做沒有了

 

注意:若是在一個事務處理彙總,若是有不少步驟,那麼能夠設置多個回滾點。可是若是回到了前面的回滾點,後面的回滾點就失效。

 

事務特色

事務具備4個屬性:原子性、一致性、隔離線持久性。這四個屬性一般稱爲ACID特性

 

原子性(atomicity):一個事務是一個不可分割的工做單位,事務中包括的諸操做要麼都作,要麼都不作

       事務從事務開始起到事務提交,要麼全部操做都成功,要麼全部操做都失敗。

 

一致性(consistency):事務必須是使數據庫從一致性狀態變到另外一個一致性狀態,一致性和原子性是密切相關的。

數據表中的數據修改,要麼是全部操做一次性都修改,要麼根本不動。

 

隔離性(isloation):

一個事務的執行不能被其餘事務干擾。即一個事務內部的操做及使用的數據對併發的其餘事務是隔離的,併發執行的各個事務之間不能互相干擾

一個客戶端在使用事務操做一個數據(多是一行或者整表)的時候,另一個客戶端不能對該數據進行操做。

 

 

何時是行被隔離?何時是整表被隔離?

說明:若是條件中使用了索引(主鍵),那麼系統是根據主鍵直接找到某條記錄,這個時候與其餘記錄無關,那麼只隔離條記錄;反之,若是說系統是經過全表檢索(每一條記錄都去檢查,沒有索引),被檢索的全部數據都會被鎖定(整表)

 

持久性(durability):持久性也稱永久性(permanence),指一個事務一旦提交,它對數據庫中數據的改變就應該是永久性的。接下來的其餘操做或故障不該該對其有任何影響。

相關文章
相關標籤/搜索