1. 程式人生 > >對DB做資料更新時,忘了加where條件不要慌

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

作為程式設計師,我們幾乎都會和資料庫打交道,在對資料庫做資料更新時,你們有沒有過忘記加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,再寫表名,養成從後往前寫的習慣。