事務:
1、事務(transaction):指的是一組操作邏輯,裡面包含了很多個單一的操作邏輯。如果有乙個邏輯失敗,那麼無論其它邏輯是否成功,都算失敗。
2、為什麼需要事務:
為了保證一組關聯邏輯的全部正確執行。舉例:銀行轉賬
3、如何開啟事務,以及事務的兩種結果處理:
開啟事務:start transaction;
兩種結果處理:commit / rollback
4、示例:
關閉自動提交
演示事務:
}5、事務特性:(acid)
原子性:事務中包含的邏輯,不可分割。
一致性:事務執行前後。資料完整性
隔離性:事務在執行期間不應該受到其他事務的影響
永續性:事務執行成功,那麼資料應該持久儲存到磁碟上。
6、事務隔離級別以及對應的安全隱患:
讀未提交(read uncommitted):髒讀
讀已提交(read committed):解決髒讀,引發不可重複的
可重複度(repeatable read):解決髒讀,不可重複的,引發幻讀
可序列化(serializable):解決髒讀,不可重複讀,幻讀
安全隱患:
讀: 髒讀
乙個事務讀到了另乙個事務未提交的資料
不可重複讀
乙個事務讀到了另乙個事務已提交的資料,造成前後兩次查詢結果不一致
幻讀乙個事務讀到了另乙個事務insert的資料 ,造成前後查詢結果不一致 。
寫:丟失更新。
7、事務隔離級別排序:
按效率(高->低):讀未提交 > 讀已提交 > 可重複讀 > 可序列化
按攔截程度(高->低):可序列化 > 可重複讀 > 讀已提交 > 讀未提交
8、事務只是針對連線連線物件,如果再開乙個連線物件,那麼那是預設的提交。
9、mysql 預設的隔離級別是 可重複讀
oracle 預設的隔離級別是 讀已提交
10、解決丟失更新的方式:
悲觀鎖:
樂觀鎖:
資料庫連線池:
dbcp:
1、不使用配置檔案的方式:
connection conn = null2、使用配置檔案方式:; preparedstatement ps = null
;
try
catch
(sqlexception e)
finally
connection conn = nullcp30:; preparedstatement ps = null
;
try
catch
(exception e)
finally
1、不適用配置檔案
connection conn = null2、使用配置檔案(注意:cp30的配置檔案可以用properties或者xml,常用xml); preparedstatement ps = null
;
try
catch
(exception e)
finally
connection conn = nulldbutils:1、增刪改; preparedstatement ps = null
;
try
catch
(exception e)
finally
//2、查詢dbutils 只是幫我們簡化了crud 的**, 但是連線的建立以及獲取工作。 不在他的考慮範圍
queryrunner queryrunner = new queryrunner(new
combopooleddatasource());
//增加
"insert into account values (null , ? , ? )", "aa" ,1000);
//刪除
"delete from account where id = ?", 5);
//更新
"update account set money = ? where id = ?", 10000000 , 6);
1)匿名內部類方式,自定義返回值的接收配置
queryrunner queryrunner = new queryrunner(new2)使用框架寫好的實現類combopooleddatasource());
account account = queryrunner.query("
select * from account where id = ?
", new resultsethandler()
return
account;
}}, 6);
system.
out.println(account.tostring());
查詢單個物件3、resultsethandler 常用的實現類queryrunner queryrunner = new queryrunner(new
combopooleddatasource());
//查詢單個物件
account account = queryrunner.query("
select * from account where id = ?",
new beanhandler(account.class), 8
);
查詢多個物件
queryrunner queryrunner = new queryrunner(new
combopooleddatasource());
list
list = queryrunner.query("
select * from account ",
new beanlisthandler(account.class));
beanhandler, 查詢到的單個資料封裝成乙個物件
beanlisthandler, 查詢到的多個資料封裝 成乙個list《物件》
arrayhandler, 查詢到的單個資料封裝成乙個陣列
arraylisthandler, 查詢到的多個資料封裝成乙個集合 ,集合裡面的元素是陣列。
maphandler, 查詢到的單個資料封裝成乙個map
maplisthandler,查詢到的多個資料封裝成乙個集合 ,集合裡面的元素是map。
DBUtils資料庫連線池
使用資料庫連線池技術,可以重複使用多個資料庫連線,避免每次執行資料庫操作都建立連線和關閉連線,也避免了大型應用同時占用多個資料庫連線。以連線mysql為例 import pymysql from dbutils.pooleddb import pooleddb pool pooleddb creat...
DBUtils資料庫連線池
使用資料庫連線池技術,可以重複使用多個資料庫連線,避免每次執行資料庫操作都建立連線和關閉連線,也避免了大型應用同時占用多個資料庫連線。以連線mysql為例 import pymysql from dbutils.pooleddb import pooleddb pool pooleddb creat...
Python資料庫連線池DBUtils
dbutils是python的乙個用於實現資料庫連線池的模組。此連線池有兩種連線模式 如果沒有連線池,使用pymysql來連線資料庫時,單執行緒應用完全沒有問題,但如果涉及到多執行緒應用那麼就需要加鎖,一旦加鎖那麼連線勢必就會排隊等待,當請求比較多時,效能就會降低了。usr bin env pyth...