中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

mysql之事務

發布時間:2020-07-14 09:11:43 來源:網絡 閱讀:449 作者:小楊楊雪松 欄目:數據庫

我們先來說說什么是事務:

       事務就是邏輯上的一組操作,組成這組操作的各個單元,要不全都成功,要不全都失敗。一個事務是一個連續的一組數據庫操作,就好像它是一個單一的工作單元進行。換言之,永遠不會是完整的事務,除非該組內的每個單獨的操作是成功的。如果在事務的任何操作失敗,則整個事務將失敗。

       mysql的事務支持不是綁定在mysql服務器本身,而是與存儲引擎相關。例如,MyISAM:不支持事務,用于只讀程序提高性能;InnoDB:支持ACID事務,行級所,并發;Berkeley DB:支持事務。

      

事務的特性(ACID):

       1.原子性(Atomicity):確保工作單元內的所有操作都成功完成,否則事務將被終止在故障點,和以前的操作將回滾到以前的狀態。簡單的說就是,一組事務,要么成功,要么撤回;

       2.一致性(Consistency):確保數據庫正確地改變狀態后,成功提交的事務。

       3.隔離性(Isolation):使事務彼此的操作的獨立和透明,即事務獨立運行,一個事務處理后的結果,影響了其他事務,那么其他事務會撤回。事務的100%隔離,需要犧牲速度。

       4.持久性(Durability):確保提交事務的結果或效果的系統出現故障的情況下讓然存在。


mysql的事務處理主要有兩種方式:

       1.用begin,rollback,commit來實現

          begin:開始一個事務

          rollback:事務回滾

          commit:事務確認

       2.直接用set來改變mysql的自動提交模式

          mysql默認是自動提交的,也就是你提交一個query,它就直接執行,我們可以通過下面的語句進行設置:

             set autocommit = 0  禁止自動提交

             set autocommit = 1  開啟自動提交

          我們要注意當我們用set autocommit = 0 的時候,你以后所有的sql都將作為事務處理,直到我們用commit確認或rollback結束。當我們結束這個事務的同時也開啟了個新的事務。按第一種方法只將當前的作為一個事務。mysql中只有INNODE和BDB類型的數據表才能支持事務處理,其他的類型是不支持的。


       在mysql中,事務開始使用COMMIT或ROLLBACK語句開始工作和結束。開始和結束語句的sql命令之間形成了大量的事務。

COMMIT&&ROLLBACK:

        這兩個關鍵字用于提交和回滾,主要用于mysql的事務。當一個成功的事務完成后,發出COMMIT命令應使所有參與表的更改才會生效。如果發生故障,應發出一個ROLLBACK命令,使返回的事務中引用的每一個表回到以前的狀態。


使用mysql的過程:

       (1)在執行sql語句之前我們要開啟事務 start transaction

       (2)正常執行我們的sql語句

       (3)當sql語句執行完畢,存在兩種情況:

                a.全都成功,我們要將sql語句對數據庫造成的影響提交到數據庫中,commit

                b.某些sql語句失敗,我們執行rollback(回滾),將對數據庫的操作趕緊撤銷


接下來我們來看一個實例:(關于銀行存取錢的)

      create table bank(name varchar(20),money decimal(5,1))engine=innodb default charset = utf8

      insert into bank values(‘shaotuo’,1000),(‘laohu’,5000)

      select * from bank

       mysql之事務

       沒有成功的話執行回滾rollback

      start transaction;//開啟事務

      update bank set money=money+500 where name = ‘shaotuo’//修改數據

      update bank set moey=money-500 where name = ‘laohu’

      ERROR 1054(42522):Unknown column ‘moey’in ‘filed list’

     

      由于上述有一個錯誤,我們要執行回滾rollback操作:

       rollback;

       select * from bank;

       mysql之事務

      我們可以看到表沒有變化

      成功之后進行commit操作:

      start transaction;

       update bank set money=money+500 where name = ‘shaotuo’

       update bank set money=money-500 where name = ‘laohu’

       兩個都執行成功后commit

       commit;

       select * from bank;

       mysql之事務

    我們可以看到我們修改數據成功了。


     


























向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

漾濞| 新河县| 龙陵县| 黄石市| 柏乡县| 石台县| 兴安县| 海晏县| 桓仁| 斗六市| 嘉义县| 奈曼旗| 肥乡县| 元江| 潮安县| 广丰县| 邮箱| 洛扎县| 花垣县| 漠河县| 波密县| 固镇县| 太康县| 尼玛县| 炉霍县| 泸溪县| 孟州市| 仁寿县| 高州市| 博兴县| 凭祥市| 济源市| 界首市| 哈巴河县| 瓦房店市| 霞浦县| 连南| 广东省| 梅河口市| 庆阳市| 上高县|