mysql學習十七之mysql的事務操作

2021-09-10 09:00:22 字數 1627 閱讀 5190

首先要先講乙個例子,銀行的轉賬業務步驟:a同學向b同學轉賬50元。

1、首先a同學要往b同學轉賬,a同學賬戶先減去50元.

2、b同學賬戶增加50元。

3、若操作成功就提交事務。若操作失敗就回滾到開始的位置,也就是說回滾到a同學轉賬之前。

事務是由一組sql語句來操作單元,組內所有sql語句共同完成乙個業務。如果整組成功,意味著全部sql都實現。如果其中任何sql語句執行失敗,那麼意味著整個操作失敗。意味著整個過程都沒有意義,然後回到操作以前的狀態。

1、失敗後,可以回到開始位置。

2、沒都成功之前,別的使用者(程序,會話)是不能看到操作內的資料修改的。

思路就是在一組操作之間設定乙個記號,用於備份,該記號相當於乙個備份點。

事務的實現是利用了mysql資料庫的innodb儲存引擎的事務日誌功能。

mysql的事務日誌功能分成兩個階段:

1、執行階段

2、將執行結果,提交到資料庫的階段。

mysql的資料庫日誌就是用來儲存執行階段的結果,如果用於選擇提交,這才將結果提交到資料庫。預設的執行方式叫:自動提交。執行完畢,自動完成提交工作。

如果要開啟事務,那麼首先要關閉自動提交功能。

1、檢視自動提交是開還是關閉

show variables like 'autocommit';
2、開啟自動提交

set autocommit=1;
關閉自動提交:

set autocommit=0;
如果關閉了自動提交,當執行sql語句時,執行完後其他使用者檢視資料庫時並沒有什麼變化。改變的只是操作使用者的資料庫的內容。之所以其他使用者沒有發現問題是因為該事務沒有完成,沒有提交。

此時的資料庫會自行判斷所有的操作語句是否都執行成功,如果成功就將結果提交,失敗就回到開始位置。利用commit,和回滾操作rollback。

3、其實不需要用set autocommit=0;這個語句,這個語句有個弊端,就是一旦執行了這個語句,整個資料庫都是關閉自動提交。其他使用者想執行自動提交的sql語句,也不行。

這裡有更好的事務操作指令。

開啟事務:start trantransaction;這個開啟事務,解決了另乙個開啟事務的弊端問題。提交後(無論成或失敗)自動關閉事務。開啟自動提交。成功用commit語句,失敗用rollback語句。

原子性:是指事務的操作是不可分割的,也就是說,這個事務是多條sql語句構成,這些事務只有都執行成功了,才叫成功,否則就叫失敗。沒有一半的成功,一半的失敗。

一致性:是指事務在執行時不允許其他進行操作,比如事務還沒有提交,但是其他使用者會運算元據庫,這樣就會由於事務沒有操作完成而操作失敗。

隔離性:隔離性是指事務的隔離性,兩個使用者對資料庫進行操作,互不影響。

永續性:即事務一旦提交,就不能發生回滾了,因為提交事務後相當於已經完全對映到資料庫了。

acid屬性。atomicity,   consistency  ,isolation,   durability.

1、開啟事務

2、書寫需要的一組sql語句

3、提交事務。完成

MySQL學習之MySQL簡介

mysql 資料庫 database 可以想象成乙個資料夾,是儲存 組織資料表的乙個容器。含有欄位的檔案才是資料表,就想象成乙個excel 是某種有著特定型別的結構化清單。從技術上說,是行。事物的一系列典型特徵,一條記錄是進行操作的最小的單位,不可再分割。表記錄對應的標題 描述事物特徵的符號 資料庫...

mysql學習之十 mysql編碼

mysql資料庫預設的編碼是 character set latin1 collation latin1 swedish ci檢視mysql支援的編碼 mysql show character set 檢視當前mysql伺服器預設編碼 mysql show variables like charac...

mysql學習之八 mysql許可權管理

mysql使用grant和revoke命令授予或撤銷針對乙個使用者的許可權。授予的許可權可以分為多個層級 全域性級授權 grant all privileges on to stefan identified by 123456 資料庫級授權 grant all privileges on vert...