對DB做資料更新時,忘了加where條件不要慌

2021-07-09 03:46:42 字數 876 閱讀 3299

作為程式設計師,我們幾乎都會和資料庫打交道,在對資料庫做資料更新時,你們有沒有過忘記加where條件的慘痛經歷?如果有,這會兒想想是不是想笑一笑?哈哈!如果沒有,那麼希望我的這篇帖子或多或少對你有點幫助,可以讓你避免或者在遇到這種情況的時候不至於感覺天要塌下來了。

對資料庫的更新操作說白了就是add、update、delete。無論你是通過程式還是直接在db客戶端裡敲sql命令,當遇到這種馬虎錯誤時,無非就兩種結果:

1、在語句執行過程中,終止了此次操作。

這種情況會讓你感到很幸福,因為理論情況下,本次馬虎的操作不會對資料造成影響。因為資料庫會把每條sql作為乙個事務,比如"update tablename set fieldname = 1",假設表裡有100w條資料,update語句會一條資料一條資料的更新,當更新到第50w條的時候,你通過db客戶端的終止功能或者你強關了你的程式,資料庫收到了對這條語句終止的命令,本次事務沒執行完,資料庫還沒有commit,所以會回滾。

這種情況多發生在資料較多的表裡,這就要感謝你們還沒有分表吧哈哈,開個玩笑。

2、語句執行完了,操作被資料庫commit了

這種情況就沒上面那麼樂觀了,也不要太害怕,特別是對生產的資料庫操作。解決這種情況最理想的方法是你們公司有dba,他可以通過運算元據庫的快取,把資料還原回去(我只碰到過delete的資料被還原,update和add沒試過。另外不同資料庫可能有差異),這麼做可以保證沒有資料丟失。

如果你們公司沒有dba,而你又對資料庫了解的不是那麼深,那就只能用最近的資料備份了,對該錶盡可能的還原。如果也沒有備份,那就找個dba,再不行就沒轍了。

雖然這種馬虎低階的錯誤是有辦法彌補的,但是避免這種錯誤,才是最好的解決方案。所以在寫更新操作相關(update、delete)的語句時,最好先些where,再寫表名,養成從後往前寫的習慣。

DOS 批量對多個MYSQL的DB進行更新

1 準備db的ip列表 testip.txt 檔案開始 ip,port,user,password 192.16.0.15,3306,root,pass1 192.16.0.16,3306,root,pass2 檔案結束 2 對全部ip迴圈執行指令碼的批處理 do ip.bat檔案開始 第乙個引數是...

做專案時的幾個感慨(持續更新 )

2012年2月13日 無論如何,都要給每乙個catch後面加上乙個 exception ee 這真的很重要,哪怕我不丟擲它!因為我至少要知道出現的異常是什麼 在專案的設計階段,想法可以有很多,但一定要有根據。在專案的實現階段,一般就不要有想法了,不然只會給經理添亂 乙個專案,不管有多少種可以實現的方...

插入資料時更新時間

通常表中會有乙個create date 建立日期的字段,其它資料庫均有預設值的選項。mysql也有預設值timestamp,但在mysql中,不僅是插入就算是修改也會更新timestamp的值!這樣一來,就不是建立日期了,當作更新日期來使用比較好!因此在mysql中要記錄建立日期還得使用dateti...