【JAVAWEB學習筆記】19_事務

來源:互聯網
上載者:User

標籤:資源   單位   dbutils   面試   cal   exe   sql   cell   nec   

事務

學習目標

案例-完成轉賬

 

一、事務概述1.什麼是事務

一件事情有n個組成單元 要不這n個組成單元同時成功 要不n個單元就同時失敗

就是將n個組成單元放到一個事務中

2.mysql的事務

預設的事務:一條sql語句就是一個事務 預設就開啟事務並提交事務

手動事務:

1)顯示的開啟一個事務:start transaction

2)事務提交:commit代表從開啟事務到事務提交 中間的所有的sql都認為有效   真正的更新資料庫

3)事務的復原:rollback 代表事務的復原 從開啟事務到交易回復 中間的所有的   sql操作都認為無效資料庫沒有被更新

 

二、JDBC事務操作

預設是自動事務:

執行sql語句:executeUpdate()  ---- 每執行一次executeUpdate方法 代表     事務自動認可

通過jdbc的API手動事務:

開啟事務:conn.setAutoComnmit(false);

提交事務:conn.commit();

復原事務:conn.rollback();

注意:控制事務的connnection必須是同一個

執行sql的connection與開啟事務的connnection必須是同一個才能對事務進行控制

 

三、DBUtils事務操作1.QueryRunner

有參構造:QueryRunner runner = new QueryRunner(DataSource dataSource);

有參構造將資料來源(串連池)作為參數傳入QueryRunner,QueryRunner會從連      接池中獲得一個資料庫連接資源操作資料庫,所以直接使用無Connection參數  的update方法即可操作資料庫

 

 

 

無參構造:QueryRunner runner = new QueryRunner();

無參的構造沒有將資料來源(串連池)作為參數傳入QueryRunner,那麼我們在使   用QueryRunner對象操作資料庫時要使用有Connection參數的方法

 

 

 

四、使用ThreadLocal綁定串連資源

 

 

五、事務的特性和隔離等級(概念性問題---面試)1.事務的特性ACID

?        1)原子性(Atomicity)原子性是指事務是一個不可分割的工作單位,事務中的操作          要麼都發生,要麼都不發生。 

?        2)一致性(Consistency)一個事務中,事務前後資料的完整性必須保持一致。

?        3)隔離性(Isolation)多個事務,事務的隔離性是指多個使用者並發訪問資料庫時,            一個使用者的     事務不能被其它使用者的事務所幹擾,多個並發事務之間資料要相互隔離。

?        4)持久性(Durability)持久性是指一個事務一旦被提交,它對資料庫中資料的改變          就是永久性的,接下來即使資料庫發生故障也不應該對其有任何影響。

 

2.並發訪問問題----由隔離性引起

如果不考慮隔離性,事務存在3中並發訪問問題。

1)髒讀:B事務讀取到了A事務尚未提交的資料   ------  要求B事務要讀取A事     務提交的資料

2)不可重複讀取:一個事務中 兩次讀取的資料的內容不一致  ----- 要求的是一個事      務中多次讀取時資料是一致的  --- unpdate

3)幻讀/虛讀:一個事務中 兩次讀取的資料的數量不一致  ----- 要求在一個事務多    次讀取的資料的數量是一致的 --insert  delete

3.事務的隔離等級

1)read uncommitted : 讀取尚未提交的資料 :哪個問題都不能解決

2)read committed:讀取已經提交的資料 :可以解決髒讀 ---- oracle預設的

3)repeatable read:重讀讀取:可以解決髒讀 和 不可重複讀取 ---mysql預設的

4)serializable:序列化:可以解決 髒讀 不可重複讀取 和 虛讀---相當於鎖表

 

注意:mysql資料庫預設的隔離等級

查看mysql資料庫預設的隔離等級:select @@tx_isolation

設定mysql的隔離等級:set session transaction isolation level 設定交易隔離等級

 

總結:

               mysql的事務控制:

                      開啟事務:start transaction;

                      提交:commit;

                      復原:rollback;

               JDBC事務控制:

                      開啟事務:conn.setAutoCommit(false);

                     提交:conn.commit();

                     復原:conn.rollback();

                 DBUtils的事務控制 也是通過jdbc

                     

                 ThreadLocal:實現的是通過線程綁定的方式傳遞參數

 

                 概念:

                      事務的特性ACID

                      並發問題:髒讀、不可重讀、虛讀\幻讀

                      解決並發:設定隔離等級

                            read uncommitted

                            read committed

                            repeatable read (mysql預設)

                            serialazable

 

                      隔離等級的效能:

                            read uncommitted>read committed>repeatable read>serialazable

                      安全性:

                            read uncommitted<read committed<repeatable read<serialazable

附圖:

轉賬操作

 

【JAVAWEB學習筆記】19_事務

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.