簡單介紹MySQL中的事務(wù)機(jī)制_MySQL教程
推薦:mysql查詢區(qū)分大小寫高性能mysql查詢默認(rèn)是不區(qū)分大小寫的 如: 效果是一樣的。 要讓mysql查詢區(qū)分大小寫,可以: 也可以在建表時(shí),加以標(biāo)識 測試30W數(shù)據(jù) 不支持索引,查詢效率底下,不建議考慮。上面這些sql語句乍看不會有什么問題,但是當(dāng)表中的數(shù)據(jù)多了以后,問題就會凸顯出來,用不到索引,
從一個(gè)問題開始
最近銀行這個(gè)事情鬧的比較厲害啊,很多儲戶的錢放在銀行,就不翼而飛了,而銀行還不管不問,說是用戶的責(zé)任,打官司,用戶還能輸了,這就是“社會主義”。咱還是少發(fā)牢騷,多種樹,莫談國事。
說到銀行存錢,就不得不說一下從銀行取錢這件事情,從ATM機(jī)取錢這件簡單的事情,實(shí)際上主要分為以下幾個(gè)步驟:
登陸ATM機(jī),輸入密碼;
連接數(shù)據(jù)庫,驗(yàn)證密碼;
驗(yàn)證成功,獲得用戶信息,比如存款余額等;
用戶輸入需要取款的金額,按下確認(rèn)鍵;
從后臺數(shù)據(jù)庫中減掉用戶賬戶上的對應(yīng)金額;
ATM吐出錢;
用戶把錢拿走。
一個(gè)簡單的取錢,主要分為以上幾步。不知道大家有沒有“天真”的想過,如果在第5步中,后臺數(shù)據(jù)庫中已經(jīng)把錢減掉了,但是ATM還就是沒有吐出錢(雖然實(shí)際也發(fā)生過,但是畢竟是低概率事件),這該怎么辦?
關(guān)于這個(gè)問題,銀行系統(tǒng)的開發(fā)人員早就想過了,那么他們是怎么來搞定這個(gè)問題的呢?這就要說到今天總結(jié)的事務(wù)這個(gè)概念了。
簡單說說事務(wù)
對于上面的取錢這個(gè)事情,如果有一步出現(xiàn)了錯(cuò)誤,那么就取消整個(gè)取錢的動作;簡單來說,就是取錢這7步,要么都完成,要么就啥也不做。在數(shù)據(jù)庫中,事務(wù)也是這個(gè)道理。
事務(wù)由一條或者多條sql語句組成,在事務(wù)中的操作,這些sql語句要么都執(zhí)行,要么都不執(zhí)行,這就是事務(wù)的目的。
對于事務(wù)而言,它需要滿足ACID特性,下面就簡要的說說事務(wù)的ACID特性。
A,表示原子性;原子性指整個(gè)數(shù)據(jù)庫事務(wù)是不可分割的工作單位。只有使事務(wù)中所有的數(shù)據(jù)庫操作都執(zhí)行成功,整個(gè)事務(wù)的執(zhí)行才算成功。事務(wù)中任何一個(gè)sql語句執(zhí)行失敗,那么已經(jīng)執(zhí)行成功的sql語句也必須撤銷,數(shù)據(jù)庫狀態(tài)應(yīng)該退回到執(zhí)行事務(wù)前的狀態(tài);
C,表示一致性;也就是說一致性指事務(wù)將數(shù)據(jù)庫從一種狀態(tài)轉(zhuǎn)變?yōu)榱硪环N一致的狀態(tài),在事務(wù)開始之前和事務(wù)結(jié)束以后,數(shù)據(jù)庫的完整性約束沒有被破壞;
I,表示隔離性;隔離性也叫做并發(fā)控制、可串行化或者鎖。事務(wù)的隔離性要求每個(gè)讀寫事務(wù)的對象與其它事務(wù)的操作對象能相互分離,即該事務(wù)提交前對其它事務(wù)都不可見,這通常使用鎖來實(shí)現(xiàn);
D,持久性,表示事務(wù)一旦提交了,其結(jié)果就是永久性的,也就是數(shù)據(jù)就已經(jīng)寫入到數(shù)據(jù)庫了,如果發(fā)生了宕機(jī)等事故,數(shù)據(jù)庫也能將數(shù)據(jù)恢復(fù)。
總結(jié)了一些事務(wù)的基本概念,在MySQL中,事務(wù)還是分為很多中的,下面就來看看到底有哪些事務(wù)。
有哪些事務(wù)
你能想象到嗎?就這么個(gè)破事務(wù)還會分以下這么多種:
扁平事務(wù);
帶有保存點(diǎn)的扁平事務(wù);
鏈?zhǔn)聞?wù);
嵌套事務(wù);
分布式事務(wù)。
現(xiàn)在就來對這些事務(wù)從概念的層面上進(jìn)行簡單的總結(jié)一下。
扁平事務(wù)
扁平事務(wù)是最簡單的一種,也是實(shí)際開發(fā)中使用的最多的一種事務(wù)。在這種事務(wù)中,所有操作都處于同一層次,最常見的方式如下:
BEGIN WORK
Operation 1
Operation 2
Operation 3
...
Operation N
COMMIT WORK
或者是這種:
BEGIN WORK
Operation 1
Operation 2
Operation 3
...
Operation N
(Error Occured)
ROLLBACK WORK
扁平事務(wù)的主要缺點(diǎn)是不能提交或回滾事務(wù)的某一部分,或者分幾個(gè)獨(dú)立的步驟去提交。比如有這樣的一個(gè)例子,我從呼和浩特去深圳,為了便宜,我可能這么干:
BEGIN WORK
Operation1:呼和浩特---火車--->北京
Operation2:北京---飛機(jī)--->深圳
ROLLBACK WORK
但是,如果Operation1,從呼和浩特到北京的火車晚點(diǎn)了,錯(cuò)過了航班,怎么辦?感覺扁平事務(wù)的特性,那我就需要回滾,我再回到呼和浩特,那么這樣成本是不是也太高了啊,所以就有了下面的第二種事務(wù)——帶有保存點(diǎn)的扁平事務(wù)。
帶有保存點(diǎn)的扁平事務(wù)
這種事務(wù)除了支持扁平事務(wù)支持的操作外,允許在事務(wù)執(zhí)行過程中回滾到同一事務(wù)中較早的一個(gè)狀態(tài),這是因?yàn)榭赡苣承┦聞?wù)在執(zhí)行過程中出現(xiàn)的錯(cuò)誤并不會對所有的操作都無效,放棄整個(gè)事務(wù)不合乎要求,開銷也太大。保存點(diǎn)用來通知系統(tǒng)應(yīng)該記住事務(wù)當(dāng)前的狀態(tài),以便以后發(fā)生錯(cuò)誤時(shí),事務(wù)能回到該狀態(tài)。
分享:WordPress如何修改Mysql數(shù)據(jù)庫的表前綴我們知道 WordPress 的數(shù)據(jù)庫表,可以設(shè)置前綴,默認(rèn)是 wp_,很多同學(xué)也就默認(rèn)用了 wp_,如果某種原因(比如提高安全性)要修改的 WordPress 數(shù)據(jù)的前綴,我們應(yīng)該怎么做? 開始之前 修改數(shù)據(jù)是一件風(fēng)險(xiǎn)很高的工作,開始之前必然就是做好 數(shù)據(jù)庫備份 ,也可以 把博客設(shè)置
- 在MySQL中使用GTIDs復(fù)制協(xié)議和中斷協(xié)議的教程
- MySQL獲取所有分類的前N條記錄
- 將MySQL的臨時(shí)目錄建立在內(nèi)存中的教程
- 介紹使用WordPress時(shí)10個(gè)常用的MySQL查詢
- 初步介紹MySQL中的集合操作
- mysql查詢區(qū)分大小寫高性能
- WordPress如何修改Mysql數(shù)據(jù)庫的表前綴
- sqlitestudio怎么用
- MS SQL Server Management Studio Express怎么安裝?
- SQL Server 錯(cuò)誤:15023
- mysql數(shù)據(jù)庫執(zhí)行SQL導(dǎo)出數(shù)據(jù)方法
- MySQL最常見的操作語句小結(jié)
MySQL教程Rss訂閱編程教程搜索
MySQL教程推薦
- navicat如何連接mysql?navicat連接mysql詳細(xì)圖文教程
- MySQL數(shù)據(jù)庫InnoDB數(shù)據(jù)恢復(fù)工具的使用小結(jié)詳解
- 安裝SQL server 提示重新啟動計(jì)算機(jī)失敗怎么解決?
- 淺析一個(gè)MYSQL語法(在查詢中使用count)的兼容性問題
- SQL Server 錯(cuò)誤:15023
- Mysql查看版本號的五種方式介紹
- 綠色版mysql注冊卸載服務(wù)方法
- MySQL字段的取值范圍
- 網(wǎng)站數(shù)據(jù)多了分頁慢該怎么辦?
- SQL查詢超時(shí)的設(shè)置方法(關(guān)于timeout的處理)
猜你也喜歡看這些
- 相關(guān)鏈接:
- 教程說明:
MySQL教程-簡單介紹MySQL中的事務(wù)機(jī)制
。