mysql 可以对执行成功的SQL语句进行回滚吗?

lxc210 2017-08-07 05:01:31
mysql 可以对执行成功的SQL语句进行回滚吗?

我看到网上一般说的 当事务中一条update或delete或insert语句执行错误时,用rollback进行回滚,但我如果想对执行成功的SQL语句回滚,该如何做?

我在C++中insert多条记录,执行成功后,表中会多出新记录。此时我想通过界面上的一个撤销按钮进行对数据库的回滚操作,即表格变回到insert多条记录前的状态,请问可以实现吗? 如果能,具体该怎么做呢


也许我的思路不是很对,希望大牛能指教一下如何通过该撤销按钮实现上一步对数据库的 增 删 改 等操作? 不胜感谢
...全文
4377 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
ZXYperseverance 2017-08-16
  • 打赏
  • 举报
回复
引用 2 楼 lxc210 的回复:
[quote=引用 1 楼 zjcxc 的回复:] 回汉是不可以的 你自己做的话,可以考虑把 insert 记录的主键记录下来,需要撤消时根据记录的主键做删除
我觉得回滚update和insert操作实现不了,不可能啊。。而且回滚容易出错,我觉得对表的修改越少越好,以免表结构被破坏。 现在我在想一个问题,就是能不能对delete操作进行类似“回滚”的操作,把delete的记录重新加上去??[/quote] 其实可以做一个触发器,创建一个历史表,把对某一个表的操作 删除或者修改首先对把原来的某条记录存入到历史表,然后在进行删除、修改。当进行撤销的时候,把原来的历史表记录还原到目标表就行了。
I_stay_here 2017-08-09
  • 打赏
  • 举报
回复
事务提交完成后已经对库做了修改无法回滚了
ACMAIN_CHM 2017-08-09
  • 打赏
  • 举报
回复
引用 4 楼 lxc210 的回复:
[quote=引用 3 楼 ACMAIN_CHM 的回复:] 如果开启了事务,则在事务提交前可以回滚。
对,这个理解,在一个事务中可以回滚,但事务提交后能不能回滚上个事务? 我觉得不太好实现,哎,感觉撤销上一步的delete都困难,delete的存储过程中还有重置自增字段,网上查到撤销对重置自增不管用。。难[/quote]已提交事务无法回滚。
lxc210 2017-08-08
  • 打赏
  • 举报
回复
引用 3 楼 ACMAIN_CHM 的回复:
如果开启了事务,则在事务提交前可以回滚。
对,这个理解,在一个事务中可以回滚,但事务提交后能不能回滚上个事务? 我觉得不太好实现,哎,感觉撤销上一步的delete都困难,delete的存储过程中还有重置自增字段,网上查到撤销对重置自增不管用。。难
ACMAIN_CHM 2017-08-08
  • 打赏
  • 举报
回复
如果开启了事务,则在事务提交前可以回滚。
zjcxc 2017-08-08
  • 打赏
  • 举报
回复
alter table tb auto_increment=xxx; # 这个可以重置自增值,前提是你要知道你回滚到那个值
zjcxc 2017-08-08
  • 打赏
  • 举报
回复
如果 mysql 是一个单任务的系统,那你的需求可以理解,也容易实现,因为单任务无非就类似一个队列,每个操作提交的时候入站,回滚的显示出从队列中取出 但关键的问题是 mysql 不是一个单任务,是复杂的并行多任务,你加了一条记录提交了,别人也把这记录改了一下提交了,现在你要了,那回滚到什么状态是合理的? 当然,单纯人实现的角度来廛,要回滚已经提交的是肯定可以的,开启 binlog,然后你可以有两种实现回滚的方式: 1. 全备+恢复到指定的事务点 这是一种可靠的方式,但可靠的结果也就是你回滚到某个点,在这个点之后动销率是否你的操作都回滚 2. 读取 binlog ,对提交的语句做反向操作(也就是 insert 变 delete, delete 变 insert, update 交换更新前后的值 ) 这种方式不那么可靠,因为你改的东西别人也可能改了,你做反向操作的结果不能保证操作后的效果是想要的
lxc210 2017-08-07
  • 打赏
  • 举报
回复
引用 1 楼 zjcxc 的回复:
回汉是不可以的 你自己做的话,可以考虑把 insert 记录的主键记录下来,需要撤消时根据记录的主键做删除
我觉得回滚update和insert操作实现不了,不可能啊。。而且回滚容易出错,我觉得对表的修改越少越好,以免表结构被破坏。 现在我在想一个问题,就是能不能对delete操作进行类似“回滚”的操作,把delete的记录重新加上去??
zjcxc 2017-08-07
  • 打赏
  • 举报
回复
回汉是不可以的 你自己做的话,可以考虑把 insert 记录的主键记录下来,需要撤消时根据记录的主键做删除

56,678

社区成员

发帖
与我相关
我的任务
社区描述
MySQL相关内容讨论专区
社区管理员
  • MySQL
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧