mysql之事務

來源:互聯網
上載者:User

標籤:mysql之事務

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

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

       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

       650) this.width=650;" title="7E(0_[DX1C1A$7JE{TQ}V0J.png" src="http://s4.51cto.com/wyfs02/M02/82/A3/wKiom1ddXwajM5YUAAAMiQfb4o8056.png" alt="wKiom1ddXwajM5YUAAAMiQfb4o8056.png" />

       沒有成功的話執行復原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;

       650) this.width=650;" title="7E(0_[DX1C1A$7JE{TQ}V0J.png" src="http://s1.51cto.com/wyfs02/M00/82/A1/wKioL1ddYniCYx6OAAAMiQfb4o8936.png" alt="wKioL1ddYniCYx6OAAAMiQfb4o8936.png" />

      我們可以看到表沒有變化

      成功之後進行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;

       650) this.width=650;" title="VQZQJAT6(1RU_PBP}B9[I9X.png" src="http://s5.51cto.com/wyfs02/M00/82/A1/wKioL1ddY2-wD1lNAAANJTxsRXk473.png" alt="wKioL1ddY2-wD1lNAAANJTxsRXk473.png" />

    我們可以看到我們修改資料成功了。


     


























mysql之事務

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.