您的位置首页百科问答

SQL数据库执行误操作delete语句对数据库的影响

SQL数据库执行误操作delete语句对数据库的影响

的有关信息介绍如下:

SQL数据库执行误操作delete语句对数据库的影响

今天,小编上班时犯了一个很尴尬的错误。在整理数据库的时候,发现有很多重复数据本人的手机号映射了几个会员的id,而实际上应该是一对一的关系,于是打算清理无用的cus_id数据。由于不小心使用了这条语句 delete from jz_activity_member where cus_id!='92862164' 本来应该是 delete from jz_activity_member where cus_id!='92862164' and phone='150****5658' 大概执行了5-10s,发现操作失误,才停止下来,此时,会员数据库有几万乃至百万的数据量,无法确定到底删除了多少宝贵的数据,于是请假高手给予以下解释。

执行

select *

from v$sqlarea a

where sql_text like '%delete from tableA%'

and a.LAST_active_TIME > date '2016-08-12',

可以查看到操作的记录

同时,还可以查看到以下信息,是11:32分执行的该项操作

接下来还可以查看到对磁盘的读写操作,由此可看出,只是执行了读操作,并未写入磁盘数据,也就是说并没有在磁盘里写入delete数据,看到这里,小编心里的石头总算落地了。

其实,只是执行delete语句,如果没有对数据库提交,是不会真正从数据库中删除掉数据的,因为,默认情况下,如果有海量数据量的话,执行3-5秒并没有完全删除掉数据库中的数据,只要是还未完全执行完delete所有记录的情况下停止或关闭数据库,都只是进行了读操作,而没有进行写操作,不执行完这些海量的数据删除操作,也不会允许提交的,这是SQL数据库的一种默认的配置。

希望对同样有粗心大意执行数据库操作的人有所帮助。