是面試題,大意是資料庫採用了主從,如果一個事務裡面既有讀又有寫(讀和寫操作有多次),自己知道資料庫主從在同一進程內讀寫可能會有問題(因為寫是寫到主庫、讀讀的是從庫,同一個進程內有可能剛寫入的資料還沒有及時的同步到從庫),但是不太明白這個問題強調是在一個事務中會產生什麼新的問題,如果有的話如何解決?
人生最曼妙的风景,竟是内心的淡定与从容!
你說的同一進程分別讀寫主從庫應該不是事務相關的問題吧?因為同一事務不支援跨庫的,據我所知沒有『主從事務』這一說,也許有,那是某些庫的實現,與資料庫無關。不管是不是同一進程,資料同步不及時的問題都可能出現。
一個事務既有讀又有寫沒什麼問題,你想想一個事務只能全是讀操作或全是寫操作合理嗎?問題在於這個情況下為了確保並發時資料的一致性,你需要用鎖,如悲觀鎖:保證當前事務正在讀取的資料不會被其它事務讀取,必須等到事務執行完成資料寫入後才能釋放鎖,否則會造成資料混亂。舉個例子:一個數字10,在沒有鎖的情況下兩個事務並行都讀取到10,並增加10後寫入,這時兩個事務寫入的都是20,而我們希望它應該是30 。我覺得這個面試題考你的應該是這個點。
你說的同一進程分別讀寫主從庫應該不是事務相關的問題吧?因為同一事務不支援跨庫的,據我所知沒有『主從事務』這一說,也許有,那是某些庫的實現,與資料庫無關。不管是不是同一進程,資料同步不及時的問題都可能出現。
一個事務既有讀又有寫沒什麼問題,你想想一個事務只能全是讀操作或全是寫操作合理嗎?問題在於這個情況下為了確保並發時資料的一致性,你需要用鎖,如悲觀鎖:保證當前事務正在讀取的資料不會被其它事務讀取,必須等到事務執行完成資料寫入後才能釋放鎖,否則會造成資料混亂。舉個例子:一個數字10,在沒有鎖的情況下兩個事務並行都讀取到10,並增加10後寫入,這時兩個事務寫入的都是20,而我們希望它應該是30 。我覺得這個面試題考你的應該是這個點。