什么是事務
在mysql事務就是最小不可分割的工作單元,事務能夠保證業務的完整性。要么都執行,要么都不執行,不允許執行一部分。
為什么需要事務呢?
數據庫事務是什么,假設一個場景:A給B轉賬100,此時A-100,B+100,如果現在只發生A-100的操作,沒有發生B+100,則會出數據前后不一致性。
在數據庫中,我們操作多條sql語句,使用事務時會產生同時失敗,或者同時成功,這樣結果使得產生的數據一致性。
mysql如何控制事務
mysql默認開啟事務。使得我們我們在執行一個sql語句時,效果立馬體現出來,產生的數據不能回滾(不能撤銷操作)。
select @@autocommit;
用于查看默認事務的提交狀態,為1則是默認提交,為0則需要手動提交。
我們創建一個uers表。
我們往該表中插入元素。
但是有時候我們希望語句執行后,能夠撤銷到上一層,這是我們使用rollback
回滾語句。
但是我們發現現在使用rollback并不能回滾數據,這是由于sql事務是默認提交的,但提交了就不能回滾,如果我們還需要回滾,則需要先將默認提交給關閉。
這時我們需要set outcommit = 0
關閉mysql自動提交。
實例:
什么時候使用、因為上面我們將默認提交給關閉了,所以現在我們使用回滾語句。
當使用回滾語句后,我們發現剛插入的數據撤銷了,底層到底是怎么實現的呢?
我們將事務的默認提交方式給關閉了,實際上insert是將數據插入到一個拷貝出來的虛表中,在數據庫中實際上是不存在的,因此我們使用rollback回滾的其實是一個虛表。
當我們把默認提交關閉后,還需要將數據寫入到數據庫中,這是我們需要將數據進行手動提交,在insert語句后面,加上commit,手動提交的方法。
在實際情況中,數據庫事務是默認提交的,因此是不能回滾的,但是我們如果想要進行回滾,則需要在執行sql語句前執行begin或者start transaction。
默認關閉提交,我們需要使用begin,start transaction語句。
因此,begin與start transaction語句作用時間只能回滾一次,多次回滾需要執行多次begin與start transaction語句。
如果,使用begin語句想要寫入到數據庫中,則需要在最后使用commit寫入數據庫中。
版权声明:本站所有资料均为网友推荐收集整理而来,仅供学习和研究交流使用。
工作时间:8:00-18:00
客服电话
电子邮件
admin@qq.com
扫码二维码
获取最新动态