对DB做数据更新时,忘了加where条件不要慌

来源:互联网 发布:java经典手机游戏 编辑:程序博客网 时间:2024/06/09 17:51

作为程序员,我们几乎都会和数据库打交道,在对数据库做数据更新时,你们有没有过忘记加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,再写表名,养成从后往前写的习惯。

0 0
原创粉丝点击