[TOC]
# 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事務操作
QueryRunner
有參構造:QueryRunner runner = new QueryRunner(DataSource dataSource);
有參構造將數據源(連接池)作為參數傳入QueryRunner,QueryRunner會從連 接池中獲得一個數據庫連接資源操作數據庫,所以直接使用無Connection參數 的update方法即可操作數據庫
無參構造:QueryRunner runner = new QueryRunner();
無參的構造沒有將數據源(連接池)作為參數傳入QueryRunner,那么我們在使 用QueryRunner對象操作數據庫時要使用有Connection參數的方法
# 事務的特性和隔離級別
## 事務的特性ACID
1)原子性(Atomicity)原子性是指事務是一個不可分割的工作單位,事務中的操作 要么都發生,要么都不發生。
2)一致性(Consistency)一個事務中,事務前后數據的完整性必須保持一致。
3)隔離性(Isolation)多個事務,事務的隔離性是指多個用戶并發訪問數據庫時, 一個用戶的 事務不能被其它用戶的事務所干擾,多個并發事務之間數據要相互隔離。
4)持久性(Durability)持久性是指一個事務一旦被提交,它對數據庫中數據的改變 就是永久性的,接下來即使數據庫發生故障也不應該對其有任何影響。
## 并發訪問問題----由隔離性引起
如果不考慮隔離性,事務存在3中并發訪問問題。
1)臟讀:B事務讀取到了A事務尚未提交的數據 ------ 要求B事務要讀取A事 務提交的數據
2)不可重復讀:一個事務中 兩次讀取的數據的內容不一致 ----- 要求的是一個事 務中多次讀取時數據是一致的 --- unpdate
3)幻讀/虛讀:一個事務中 兩次讀取的數據的數量不一致 ----- 要求在一個事務多 次讀取的數據的數量是一致的 --insert delete
## 事務的隔離級別
1)read uncommitted : 讀取尚未提交的數據 :哪個問題都不能解決
2)read committed:讀取已經提交的數據 :可以解決臟讀 ---- oracle默認的
3)repeatable read:重讀讀取:可以解決臟讀 和 不可重復讀 ---mysql默認的
4)serializable:串行化:可以解決 臟讀 不可重復讀 和 虛讀---相當于鎖表
隔離級別的性能:
read uncommitted>read committed>repeatable read>serialazable
安全性:
read uncommitted<read committed<repeatable read<serialazable
注意:mysql數據庫默認的隔離級別
查看mysql數據庫默認的隔離級別:
~~~
select @@tx_isolation
~~~

設置mysql的隔離級別:set session transaction isolation level 設置事務隔離級別

- 基礎
- 編譯和安裝
- scanner類(鍵盤錄入)
- Random類(隨機數)
- 數組
- 方法
- 類
- ArrayList集合
- char與int
- eclipse
- IDEA
- 變量與常量
- 常用API
- String,StringBuffer,StringBuilder
- 正則,Date,DateFormat,Calendar
- 包裝類,System,Math,Arrays,BigInteger,BigDecimal
- 集合,迭代器,增強for,泛型
- List,set,判斷集合唯一
- map,Entry,HashMap,Collections
- 異常
- IO
- File
- 遞歸
- 字節流
- 字符流
- IO流分類
- 轉換流
- 緩沖流
- 流的操作規律
- properties
- 序列化流與反序列化流
- 打印流
- commons-IO
- IO流總結
- 多線程
- 線程池
- 線程安全
- 線程同步
- 死鎖
- lock接口
- ThreadLoad
- 等待喚醒機制
- 線程狀態
- jdbc
- DBUtils
- 連接池DBCP
- c3p0連接池
- 網絡編程
- 多線程socket上傳圖片
- 反射
- xml
- 設計模式
- 裝飾器模式
- web service
- tomcat
- Servlet
- response
- request
- session和cookie
- JSP
- EL
- JSTL
- 事務
- 監聽器Listener
- 過濾器Filter
- json
- linux安裝軟件
- 反射詳解
- 類加載器和注解
- 動態代理
- jedis
- Hibernate
- 簡介
- 創建映射文件
- Hibernate核心配置文件
- 事務和增刪改查
- HibernateUtils
- 持久化對象的三種狀態
- 檢索方式
- query
- Criteria
- SQLQuery
- 持久化類
- 主鍵生成策略
- 緩存
- 事務管理
- 關系映射
- 注解
- 優化
- struts2
- 搭建
- 配置詳解
- Action
- 結果跳轉方式
- 訪問ServletAPI方式
- 如何獲得參數
- OGNL表達式
- valueStack 值棧
- Interceptor攔截器
- spring
- 導包
- IOC和DI
- Bean獲取與實例化
- Bean屬性注入
- spring注解
- 注解分層
- junit整合
- aop
- 動態代理實現
- cglib代理實現
- aop名詞
- spring的aop
- aop-xml詳解
- aop-注解詳解
- 代理方式選擇
- jdbcTemplate
- spring事務管理
- 回滾注意
- 事務傳播屬性
- MyBatis
- MyBatis簡介
- 入門程序
- 與jdbc hibernate不同
- 原始Dao開發
- Mapper動態代理方式
- SqlMapConfig.xml配置文件
- 輸入參數pojo包裝類
- resultMap
- 動態sql
- 一對一關聯
- 一對多
- 整合spring
- 逆向工程
- maven
- maven簡介
- 倉庫
- maven目錄結構
- maven常用命令
- 生命周期
- eclipse中maven插件
- 入門程序
- 整合struct
- 依賴范圍
- 添加插件
- idea配置
- jar包沖突
- 分模塊開發
- 構建可執行的jar包(包含依賴jar包)
- springMVC
- 處理流程
- java面試
- java版本升級
- java1-8版本變更
- java9新特性
- 鎖
- java資料
- idea
- jdk版本切換
- log4j
- 入門實例
- 基本使用方法
- Web中使用Log4j
- spring中使用log4j
- java代碼優化