搜尋此網誌

2016年10月6日 星期四

尚未commit之前,如何取得寫入的資料

為了達到資料一致性,我們會在程式上包Transaction的動作

但是一旦包了Transaction,在尚未commit之前,如果不是在同一個connection下

無法讀到資料

譬如

create connection1

create connection2

connection1.insert

connection2.select -> 會抓不到 connection1.insert 的資料

除非connection1.commit

但是如果是

connection1.select -> 這就可以抓到 connection1.insert 的資料,即使尚未 connection1.commit

所以聰明的你應該知道,那就在一個動作內,都用同一個connection就好啦

沒錯

而且,我們可以把connection存到session變數內

經過測次,也可以有一樣效果

這樣一來就不用一直傳遞connection參數

只要需要時,去session抓出來用就好

譬如某段執行時,可以

create_connection();

do_something();

drop_connection();

---------------------------------------

create_connection() {
   create connection
   connection open
   create trainsation
   begin trainsation
   store connection to session
}

do_someting() {
   get connection from session
   query....
   update.....
}

drop_connection() {
   get connection from session
   connection.commit
   drop connect
   drop session
}