回覆列表
  • 1 # Java架構達人

    什麼是事務

    一、概念

    事務指的是邏輯上的一組操作,這一組操作要不同時成功,要不同時失敗,只要這一組操作裡有一個失敗,意味著這一組都失敗 ---同生共死

    二、事務的管理

    (MySQL資料庫事務預設是自動提交,Oracle資料庫事務預設是不自動提交)

    (一)dos命令列管理事務1.手動開啟事務start tansaction --開啟事務excute 多條 sqlcommit 提交 / rollback 回滾2.設定一個自動提交引數show variables like "%commit%" --檢視與commit相關引數set autocommit = 0; -- 將autocommit引數設定為OFF.

    (二)JDBC管理事務JDBC的事務的管理的APIsetAutoCommit(boolean autoCommit); --是自動提交還是手動commit(); --提交事務rollback(); --回滾

    (三)建立表,插入3條資料create table account(id int primary key auto_increment,name varchar(20),money double);

    insert into account values (null,"張森",10000);insert into account values (null,"鳳姐",10000);insert into account values (null,"如花",10000)

    內省1.用來獲取JavaBean的屬性及屬性的get和set方法2.JavaBean就是一個滿足了特定格式的Java類

    三、事務特性

    原子性:強調事務的不可分割一致性:強調的是事務的執行的前後,資料的完整性要保持一致隔離性:一個事務的執行不應該受到其他事務的干擾永續性:事務一旦結束(提交/回滾)資料就持久保持到了資料庫

    四、如果不考慮隔離性,會引發一些安全性問題

    1、讀問題髒讀:一個事務讀到另一個事務還沒有提交的資料不可重複讀:一個事務讀到了另一個事務已經提交的update資料,導致在當前的事務中多次查詢資料不一致虛讀/幻讀:一個事務讀到另一個事務已經insert資料,導致當前事務中多次查詢結果不一致

    2、寫問題引發兩類丟失更新

    五、解決引發的讀問題

    設定事務的隔離級別read uncommitted :未提交讀。髒讀,不可重複讀,虛讀都可能發生read committed :已提交讀。避免髒讀,不可重複讀和虛度有可能發生repeatable read :可重複讀。避免髒讀和不可重複讀,虛讀可能發生serializable :序列化的。避免髒讀,不可重複讀,虛讀的發生select @@tx_isolation; 檢視隔離級別set session transaction isolation level 級別; 設定隔離級別

  • 中秋節和大豐收的關聯?
  • 如何整理出國留學前的檔案,需要什麼內容?