日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

mysql-管理事务

發(fā)布時間:2025/3/20 数据库 14 豆豆
生活随笔 收集整理的這篇文章主要介紹了 mysql-管理事务 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

一、介紹

  mysql支持幾種基本的數(shù)據(jù)庫引擎,其中MYSQL的兩種最基本的引擎MyISAM和InnoDB,其中只有InnoDB支持事務(wù)管理。

  事務(wù)處理:可以用來維護數(shù)據(jù)庫的完整性,他保證成批的MySQL操作要么完全執(zhí)行,要么不完全執(zhí)行。

  事務(wù)處理是一種機制,用來管理必須成批執(zhí)行的MYSQL操作,以保證數(shù)據(jù)庫不包含不完整的操作結(jié)果。

?

二、事務(wù)的幾個基本術(shù)語

  事務(wù)(transaction):指一組SQL語句

  回退(rollback):指撤銷指定SQL語句的過程

  提交(commit):指將未存儲的SQL語句結(jié)果寫入數(shù)據(jù)庫表。

  保留點(savepoint):指事務(wù)處理中設(shè)置的臨時占位符,你可以對它發(fā)布回退(與回退整個事務(wù)處理不同)

?

三、控制事務(wù)處理

  事務(wù)開始:

    start transaction;

  1、使用ROLLBACK:MySQL用這個命令來回退(撤銷)MySQL語句:

    select * from ordertotal;

    start transaction;

    delete from transaction;

    select * from ordertotals;

    rollbaclk;

    select * from ordertotals;

    雖然已經(jīng)刪除數(shù)據(jù),但是我們在提交之前使用了rollback,那么在進行查詢的時候,已經(jīng)刪除了的數(shù)據(jù)又恢復(fù)了。

    rollback只能在一個事務(wù)處理內(nèi)使用,事務(wù)處理用來管理insert,update和delete語句,而select,create,drop等都不能使用事務(wù)管理。

  

    2、使用commit:在事務(wù)處理中,提交并不會隱含的進行,為進行明確的提交,使用commit語句。

      start transaction;

      delete from orderitems where order_num=20010;

      delete from orders where order_num=20010;

      commit;

?

    3、使用保留點:簡單的rollback和commit語句就可以寫入或撤銷整個事務(wù)處理,但是更復(fù)雜的事務(wù)處理可能需要部分提交或回退。

   為了支持回退部分事務(wù)處理,必須能在事務(wù)處理塊中合適的位置放置占位符,這樣需要回退,可以回退到某個占位符。

   savepoint delete1;

   rollback to delete1;  

    

    4、更改默認(rèn)的提交方式

      默認(rèn)的mysql行為是自動提交所有的改動,但是你可以設(shè)置Mysql不自動提交修改,如下:  

      set autocommit=0;

?

三、事務(wù)隔離級別

    事務(wù)隔離性:是當(dāng)多個用戶并發(fā)訪問數(shù)據(jù)庫時,比如操作同一張表時,數(shù)據(jù)庫為每一個用戶開啟的事務(wù),不能被其他事務(wù)的操作所干擾,多個并發(fā)事務(wù)之間要相互隔離。

    1、串行化(Serializable):所有事務(wù)一個接一個執(zhí)行,這樣可以避免幻讀(phantom read),對于基于鎖來實現(xiàn)的并發(fā)控制的數(shù)據(jù)庫來說,串行化要求在執(zhí)行范圍查詢的時候,需要獲取范圍鎖,如果不是基于鎖實現(xiàn)并發(fā)控制的數(shù)據(jù)庫,則檢查到有違反串行操作的事務(wù)時,需回滾該事務(wù)。  

    2、可重復(fù)讀(repeated read):所有被select獲取的數(shù)據(jù)都不能被修改,這樣就可以避免一個事務(wù)前后讀取不一致的情況。但是沒有辦法控制幻讀,因為這個時候事務(wù)不能更改所選的數(shù)據(jù),但是可以增加數(shù)據(jù),因為強惡意事務(wù)沒有范圍鎖。(事務(wù)a讀取數(shù)據(jù),事務(wù)b可以同樣讀取,不可以更改數(shù)據(jù),但是可以增加數(shù)據(jù))

    3、讀已提交(read commit):被讀取的數(shù)據(jù)可以被其他事務(wù)修改,這樣可能導(dǎo)致不可重復(fù)讀,也就是說,事務(wù)讀取的時候,獲取讀鎖,但是在讀完之后立即釋放(不需要等事務(wù)結(jié)束),而寫鎖則是事務(wù)提交之后才釋放的,釋放讀鎖之后就可能被其他事務(wù)修改數(shù)據(jù)。改等級也是sql server默認(rèn)的隔離等級。(事務(wù)a讀取數(shù)據(jù),事務(wù)b不可以讀取數(shù)據(jù),事務(wù)b可以修改數(shù)據(jù))

    4、讀未提交(read uncommitted):最低的隔離等級,允許其他事物看到?jīng)]有提交的數(shù)據(jù),會導(dǎo)致臟讀。

?

    總結(jié):1、四個級別逐漸增強,每個級別解決一問題;

      ? 2、事務(wù)級別越低,性能越差,大多數(shù)環(huán)境read committed就可以用了。

轉(zhuǎn)載于:https://www.cnblogs.com/television/p/8370786.html

總結(jié)

以上是生活随笔為你收集整理的mysql-管理事务的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。