首先要先講乙個例子,銀行的轉賬業務步驟: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...