<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
可以保證資料的完整性。事務(Transaction),就是將一組SQL語句放在同一批次內去執行,如果一個SQL語句出錯,則該批次內 的所有SQL都將被取消執行。
例子: 轉賬為例。
金庸向張無忌轉賬1000元。----在資料庫中修改兩個賬號的餘額。
發生意外情況,則出現金庸減錢成功,而張無忌加錢失敗。 如何解決?
使用事務進行解決,此時程式碼執行後金庸的錢沒有減,張無忌的錢也沒有加
如果不寫begin;commit;此時事務預設自動開啟,自動提交; 在資料庫中 ,事務都是自動提交的。事務的自動提交就是 執行sql語句完成之後 就立刻持久化到資料庫中。
begin;開始事務
rollback;回滾事務
commit;提交事務
當我們新增了begin;和commit;後 事務的提交就從自動變成手動。因為中途出錯,所以導致 commit;不執行,也就是說緩衝區中的資料沒有到持久化 的資料庫中 。
public class Test { public static void main(String[] args) { Connection connection =null; try { Class.forName("com.mysql.cj.jdbc.Driver"); connection= DriverManager.getConnection( "jdbc:mysql://localhost:3306/mydb?serverTimezone=Asia/Shanghai", "root","123456"); connection.setAutoCommit(false);//開啟事務的手動提交 String sql = "update tb_emp set salary=salary-1000 where name='金庸'"; PreparedStatement ps =connection.prepareStatement(sql); ps.executeUpdate(); String sql1 = "update tb_emp setsalary=salary+1000 where name='張無忌'"; ps = connection.prepareStatement(sql1); ps.executeUpdate(); connection.commit();//提交事務 }catch (Exception e){ try { connection.rollback();//事務回滾 最初的狀態 } catch (SQLException throwables) { throwables.printStackTrace(); } e.printStackTrace(); }finally{ } } }
從開啟到提交為一個事務。 由此可見,一個事務對應一組業務。一個事務中間可以有一條sql,多條sql。 所以 一個業務開始之前 開啟事務 一個業務 結束之後 提交事務。 我們這個轉賬案例:需要幾個事務? 可以寫成兩個事務,但是不合適。因為我們的需求 讓金庸減的同時讓張無忌加錢。只能寫 成一個事 務。 把多條sql語句當作一件事情,要同時都能執行到。
事務(Transaction),一般是指要做的或所做的事情。在計算機術語 中是指存取並可能更新資料庫中各種資料項的一個程式執行單元 (unit)。事務通常由高階資料庫操縱語言或程式語言(如SQL,C++或 Java)書寫的使用者程式的執行所引起,並用形如begin transaction和 end transaction語句(或函數呼叫)來界定。事務由事務開始 (begin transaction)和事務結束(end transaction)之間執行的全體 操作組成。
概括為: 事務是由一些列動作組成,這些動作要麼都執行,要麼都不執行。
1、原子性(Atomicity): 事務開始後所有操作,要麼全部做完,要麼全部不做,不可能停滯在中間 環節。事務執行過程中 出錯,會回滾到事務開始前的狀態,所有的操作就 像沒有發生一樣。也就是說事務是一個不可分 割的整體,就像化學中學過 的原子,是物質構成的基本單位。
2、一致性(Consistency): 事務開始前和結束後,資料庫的資料完整性約束沒有被破壞,事務前後操 作資料是一致的 。比如 A向B轉賬,不可能A扣了錢,B卻沒收到。 能量守恆。
3、隔離性(Isolation): 一個事務的執行不能被其他事務干擾。即一個事務內部的操作及使用的數 據對並行的其他事務是 隔離的,並行執行的各個事務之間不能互相干擾。 比如A正在從一張銀行卡中取錢,在A取錢的過 程結束前,B不能向這張卡 轉賬。 兩個事務之間是有隔離級別,隔離級別的不同會導致出現不同的問 題。此時產生三種讀: 髒讀 幻讀 不可重複讀。
4、永續性(Durability): 永續性(durability)。永續性也稱永久性(permanence),指一個事務 一旦提交,它對資料庫 中資料的改變就應該是永久性的。接下來的其他操 作或故障不應該對其有任何影響。
1、髒讀:
事務A讀取了事務B更新的資料,然後B回滾操作,那麼A讀取到的資料是髒資料。
2、不可重複讀
事務A多次讀取同一資料,事務B在事務A多次讀取的過程中,對資料作了更新並提交,導致事務A多次讀取同一資料時,結果不一致。
3、幻讀
已知有兩個事務A和B,A從一個表中讀取了資料,然後B在該表中插入了一些新資料,導致A再次讀取同一個表,就會多出幾行,簡單的說,一個事務中先後讀取一個範圍的記錄,但每次讀取的記錄數不同,稱之為幻象讀。
小結:不可重複讀和幻讀容易混淆,不可重複讀側重於修改,幻讀側重於新增或刪除,解決不可重複讀的問題只需鎖住滿足條件的行,解決幻讀需要鎖表。
事務隔離性的等級:
檢視事務的隔離等級:
語句:select @@global.transaction_isolation,@@transaction_isolation;
事務的隔離等級有四點,每種隔離等級有其會出現的情況
1.Read Uncommitted(讀取未提交內容)
在該隔離級別,所有事務都可以看到其他未提交事務的執行結果。本隔離級別很少用於實際應用,因為它的效能也不比其他級別好多少。讀取未提交的資料,也被稱之為髒讀(Dirty Read)。
2.Read Committed(讀取提交內容 也叫做不可重複讀)
這是大多數資料庫系統的預設隔離級別(但不是MySQL預設的)。它滿足了隔離的簡單定義:一個事務只能看見已經提交事務所做的改變。這種隔離級別 也支援所謂的不可重複讀(Nonrepeatable Read),因為同一事務的其他範例在該範例處理其間可能會有新的commit,所以同一select可能返回不同結果。
一個事務讀某條資料讀兩遍,讀到的是不一樣的資料,也就是說,一個事務在進行中讀取到了其他事務對舊資料的修改結果,(比如說 我開一個事務 修改某條資料 先查後改 執行修改動作的時候發現這條資料已經被別的事務刪掉了)
3.Repeatable Read(可重讀)
這是MySQL的預設事務隔離級別,它確保同一事務的多個範例在並行讀取資料時,會看到同樣的資料行。不過理論上,這會導致另一個棘手的問題:幻讀 (Phantom Read)。簡單的說,幻讀指當用戶讀取某一範圍的資料行時,另一個事務又在該範圍內插入了新行,當用戶再讀取該範圍的資料行時,會發現有新的“幻影” 行。InnoDB和Falcon儲存引擎通過多版本並行控制(MVCC,Multiversion Concurrency Control)機制解決了該問題。
一個事務中,讀取到了其他事務新增的資料,彷彿出現了幻象。(幻讀與不可重複讀類似,不可重複讀是讀到了其他事務update/delete的結果,幻讀是讀到了其他事務insert的結果)
4.Serializable(可序列化)
這是最高的隔離級別,它通過強制事務排序,使之不可能相互衝突,從而解決幻讀問題。簡言之,它是在每個讀的資料行上加上共用鎖。在這個級別,可能導致大量的超時現象和鎖競爭。
隔離級別越高,然後執行效率越低。
到此這篇關於MySQL事務管理的作用詳解的文章就介紹到這了,更多相關MySQL事務管理內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45