最近在處理資料同時存取時出現異常的狀況。
研究了一下程式寫法後發現一些小瑕疵,
就是在撰寫多人同時使用的系統程式時,
再進行資料庫存取觀念要做一些注意。
雖說交易管理的觀念是在資料庫管理的基本觀念,
但在程式設計時還有會有被忽略的時候。
畢竟有些程式開發的時候,初步規劃會有單人單機操作的規劃設計。
因此會出現一些看似可行的做法。
最後多人同時上線作業時就會出現異常資料的可能性就會常常出現。
因此特別把交易管理的觀念在這裡紀錄一下。
一般而言,對資料庫存取時無非是insert、update、delete、select這四個動作。
但是除了select以外,其他的存取基本上都有可能出現互相影響的可能性。
因此需要知道資料庫的commit跟rollback這兩個觀念。
其實就是commit跟commit間可以有多個select指令。
但是如果遇到有update或insert的時候就需要去注意一下。
(會特別講是這兩個是因為小弟就是被這兩個指令害了,被轟了一天。哈哈)
在insert新資料時入沒有交易觀念的話,程式可能會出現同時insert的異常,而造成會有一些神奇的異常資料。
其實就是每一個指令在進行修改時,需要先鎖定該資料表,讓該資料不得因為其他指令而被修改。
這邊可能需要一些繪圖才能容易說明。
說簡單一點就是需要讓指令間會互相排隊等待。
如A下的指令到commit之後B下的指令才可以被執行。
這樣才能排除同時下指令的狀況出現。
至於為何會提到rollback這個指令呢?
其實很簡單
就是我們在下一次commit之前,可能會是做了很多條的更新指令。但是如果其中一條錯誤時,要還原資料難不成要DBA連入資料庫手動修改嗎?(可憐的DBA)
因此我會利用try catch方式來讓他去執行。
假設有其失敗的時候,就把全部剛剛做的事情都還原回去。
這樣就可以不用這辛苦了。
附送一句關鍵詞"不做好自動化,就自己做到死"
2017年12月15日 星期五
訂閱:
張貼留言 (Atom)
[資安]社交工程
社交工程 在資訊安全領域中所提出的"社交工程"議題,其實也可以說"溝通"一詞的另一個說詞。 人在討論交換訊息時的行為,正是所謂的社交工程的過程一模一樣,主要差異在於行為與意圖。 有心人士預計要蒐集他人的各種資訊使用的對話溝通方式,其中我們...
-
標竿人生 第一天-萬物皆由神開始 我們都因著世俗的眼光而被迷惑,追求的高薪、高職位、高收入、高儲蓄等等的目標去追求。兒都遺忘了,我們本身是存在是因為神有它的旨意存在,因為他的旨意,我們出現在這個事件上,因為我們都是神所創造的,並有我們為了成就神而被神創造的,我們雖然可以選擇人生...
-
取得當月份的第一天與最後一天 $month_start = date('Ym01 00:00:00'); //本月第一天 $month_end = strtotime($month_start); $month_end = strtotime(...
-
標竿人生 第三天-甚麼在主導你的人生 人的一生中會有遇到許許多多的困境與備受期待事務,可能是生活上各項事務不不如意,缺乏資源等等,或者是在職場、情場、人際關係上遇到許多人對自己有所有期待。因而有些人會為了這些別人加諸於自身的正向或負向的話語開始被控制。 但這樣的控制結果往往都是...
沒有留言:
張貼留言