這篇文章主要介紹“Mysql事務的意思是什么”,在日常操作中,相信很多人在Mysql事務的意思是什么問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”Mysql事務的意思是什么”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!
一. 什么是事務。
知道事務,要先了解mysql的引擎,在5.5版本以前mysql的引擎默認是MyISAM,到了Mysql5.5版本以后,才有了InnoDB,兩者的區別之一就是InnoDB支持事務。
事務就是進行一次處理的基本單元,要么完全執行,要么都不執行。
二. 事務的特性(ACID)。
A,也就是原子性(Atomicity)??梢岳斫鉃榻M成物質的基本單位,也是我們進行數據處理操作的基本單位,必須是一個整體不可分割。
C,就是一致性(Consistency)。一致性指的就是數據庫在進行事務操作后,會由原來的一致狀態,變成另一種一致的狀態。也就是說當事務提交后,或者當事務發生回滾后,數據庫的完整性約束不能被破壞。
I,就是隔離性(Isolation)。它指的是每個事務都是彼此獨立的,不會受到其他事務的執行影響。也就是說一個事務在提交之前,對其他事務都是不可見的。
D,指的是持久性(Durability)。事務提交之后對數據的修改是持久性的,即使在系統出故障的情況下,比如系統崩潰或者存儲介質發生故障,數據的修改依然是有效的。因為當事務完成,數據庫的日志就會被更新,這時可以通過日志,讓系統恢復到最后一次成功的更新狀態。(這里就涉及到了回滾日志和重做日志的相關知識了)
三. 事務的使用操作。
start transaction 或者 begin #開啟事物 savepoint #在事物中創建一個保存點,方便后面可以回滾到某個點的操作 commint #事務提交,這里提交后就相當于完成了,對數據庫的改動就是永久性的了。 rollback #事務回滾,執行這個就是將此次的事務中全部的操作都恢復到事物開始前的狀態 rollback to [savepoint] #將事務回滾到某個保存點 release savepoint #刪除某個保存點 set transaction #設置事務的隔離級別
事務有隱式事務和顯式事務兩種方式,數據庫默認一般都是隱式事務。
1.1. 隱式事務,每次修改數據庫后不需要手動commit命令,就直接修改數據庫并保存結果,比如一般的增刪改操作;
1.2. 顯示事務,需要在操作完最后一步,手動commit命令提交事務。
#創建數據庫 mysql> create table user( -> name varchar(255), -> primary key (name) -> ) engine=InnoDB; Query OK, 0 rows affected (0.08 sec) #開啟事務 mysql> begin; Query OK, 0 rows affected (0.00 sec) #插入數據 mysql> insert into user select '張三'; Query OK, 1 row affected (0.01 sec) Records: 1 Duplicates: 0 Warnings: 0 #查詢,這里顯示已經有了一條數據,但是我們還沒有commit命令提交 mysql> select * from user; +--------+ | name | +--------+ | 張三 | +--------+ 1 row in set (0.00 sec)
這里我們通過mysql的可視化工具去查看,或者在打開一個終端去查看
#查看數據,顯示的為空,因為我們上面的事務還沒提交,這也就是事務的第三個特性(I),隔離性 mysql> select * from user; Empty set mysql>
我們返回之前的終端commit提交事務,在來查詢。
mysql> insert into user select '張三'; Query OK, 1 row affected (0.01 sec) Records: 1 Duplicates: 0 Warnings: 0 mysql> select * from user; +--------+ | name | +--------+ | 張三 | +--------+ 1 row in set (0.00 sec) #提交 mysql> commit; Query OK, 0 rows affected (0.04 sec) mysql>
在另一個終端查詢
mysql> select * from user; Empty set mysql> select * from user; +--------+ | name | +--------+ | 張三 | +--------+ 1 row in set (0.00 sec) mysql>
這里在事務沒有提交前,也就是插入數‘張三’,沒有commit之前,別的任何查詢都查不到這條數據,但是事務內查詢是有這條數據,這就是事物隔離性,如果最后沒有commit
,而是執行的rollback
,那么整個事務回滾,‘張三’這條數據依然不存在事務結束,這也就是事務的一致性,前后的狀態都是一致的。
到此,關于“Mysql事務的意思是什么”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注億速云網站,小編會繼續努力為大家帶來更多實用的文章!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。