外野程序员多,问一个mysql的问题

Tips:点击图片进入下一页

如果表里有50条数据,删掉了其中10条,我有没有办法查找到删除了的10条数据的信息?
我想到的是不是可能从log里找到,还是有专门写法


网友评论:
没有,你都删了库里肯定是没了
开过mysql-binlog的话倒是可以回滚

我想到的也是回滚数据,但今天认识的人被面试官问了这样一个问题,我还觉得是不是有什么奇技淫巧
mysql不知道,oracle有个瞬回机制,就是防止删库,可以定位一个时间段里的数据再显示一遍,剩下的,就是tm赶快拷数据啊
找到了[size=11.832px]1.delete误删除的解决方法
原理:[size=11.832px]利用oracle提供的闪回方法,如果在删除数据后还没做大量的操作(只要保证被删除数据的块没被覆写),就可以利用闪回方式直接找回删除的数据
具体步骤为:[size=11.832px]*确定删除数据的时间(在删除数据之前的时间就行,不过最好是删除数据的时间点)[size=11.832px]*用以下语句找出删除的数据:select * from 表名 as of timestamp to_timestamp("删除时间点","yyyy-mm-dd hh24:mi:ss")[size=11.832px]*把删除的数据重新插入原表:[size=11.832px]     insert into 表名 (select * from 表名 as of timestamp to_timestamp("删除时间点","yyyy-mm-dd hh24:mi:ss"));注意要保证主键不重复。[size=11.832px]如果表结构没有发生改变,还可以直接使用闪回整个表的方式来恢复数据。[size=11.832px]具体步骤为:[size=11.832px]表闪回要求用户必须要有flash any table权限

mysql可以恢复,但是很复杂,面试问这个我只会答,我没有删除的权限,一般只修改状态
如果是innodb事务处理操作的话 可以rollback 不然只能用binary log
面试官的意思貌似不是回滚而只是想查询出来,我觉得意思也肯定不是把回滚的数据转到临时表里再查询这么麻烦

oracle这个功能赶紧挺符合要求,但感觉mysql这种轻量级不会有这种功能吧

毕竟数据库最有牌面的,mysql有,但是实现起来没有那么简单,如果只是面试问问,你觉得能随便说出来删库怎么恢复,并且语句正确,不是一件细思极恐的事吗?鬼知道你怎么会记住这种知识,经历了什么
或许有语言陷阱,你问问他说的是物理删除还是逻辑删除

—— 来自 Xiaomi MI 6, Android 8.0.0上的 v2.0.3-play

原来是解脑筋急转弯?
大概率是脑筋急转弯吧, 已提交的delete操作只能通过binlog找回。。。。
加个标志位,标记为已删除,这样查?这会不会又过于弱智

—— 来自 Coolpad C105, Android 6.0.1上的 v2.0.3
面什么职位问到数据库删除恢复?是DBA么?

并不是,是开发
开发你告诉他事务没提交就rollback

其他的事情让dba去搞