默认情况下,MySQL采用autocommit模式运行。这意味着,当执行更新表的语句之后,MySQL立刻把更新存储到磁盘中。
创新互联专注于企业营销型网站、网站重做改版、太子河网站定制设计、自适应品牌网站建设、H5技术、商城网站建设、集团公司官网建设、成都外贸网站建设、高端网站制作、响应式网页设计等建站业务,价格优惠性价比高,为太子河等各大城市提供网站开发制作服务。
事务安全型的存储引擎(如InnoDB, BDB或NDB簇),
使用以下语句禁用autocommit模式:
SET AUTOCOMMIT=0;
使用START TRANSACTION,autocommit仍然被禁用,直到COMMIT或ROLLBACK结束事务为止。然后autocommit模式恢复到原来的状态。
mysql select * from test_main //
+----+-------+
| id | value |
+----+-------+
| 1 | ONE |
| 2 | TWO |
| 3 | THREE |
+----+-------+
3 rows in set (0.00 sec)
mysql START TRANSACTION;
- //
Query OK, 0 rows affected (0.00 sec)
mysql INSERT INTO test_main VALUES(4, 'FOUR') //
Query OK, 1 row affected (0.00 sec)
mysql INSERT INTO test_main VALUES(4, 'FOUR') //
ERROR 1062 (23000): Duplicate entry '4' for key 'PRIMARY'
mysql ROLLBACK//
Query OK, 0 rows affected (0.01 sec)
mysql select * from test_main //
+----+-------+
| id | value |
+----+-------+
| 1 | ONE |
| 2 | TWO |
| 3 | THREE |
+----+-------+
3 rows in set (0.00 sec)
首先确定执行update语句时是否设置成的非自动提交,若设置了,直接rollback;若未设置,查看是否启用了二进制日志文件,若是,将其恢复到执行该时间点前;若未设置,那数据库层面就没办法了。
试一下这个:
1.删除c:\documents
and
settings\all
users\application
data下的mysql文件夹
(当all
users
下没有application
data文件夹时,显示隐藏的文件夹,将会看到)
2.在控制面板卸载mysql
3.删除mysql安装目录下的mysql文件夹
4.重启电脑
5.重装
MYSQL如何在事务不提交时自动回滚
如果某条执行失败,怎样使用事物的回滚 创建表语句: CREATE TABLE `shiwu` ( `...mysql -- 自动提交功能取消 mysql set autocommit=0; Query OK
我们经常会遇到操作一张大表,发现操作时间过长或影响在线业务了,想要回退大表操作的场景。在我们停止大表操作之后,等待回滚是一个很漫长的过程,尽管你可能对知道一些缩短时间的方法,处于对生产环境数据完整性的敬畏,也会选择不做介入。最终选择不作为的原因大多源于对操作影响的不确定性。实践出真知,下面针对两种主要提升事务回滚速度的方式进行验证,一种是提升操作可用内存空间,一种是通过停实例,禁用 redo 回滚方式进行进行验证。
仔细阅读过官方手册的同学,一定留意到了对于提升大事务回滚效率,官方提供了两种方法:一是增加 innodb_buffer_pool_size 参数大小,二是合理利用 innodb_force_recovery=3 参数,跳过事务回滚过程。第一种方式比较温和,innodb_buffer_pool_size 参数是可以动态调整的,可行性也较高。第二种方式相较之下较暴力,但效果较好。
两种方式各有自己的优点,第一种方式对线上业务系统影响较小,不会中断在线业务。第二种方式效果更显著,会短暂影响业务连续,回滚所有没有提交的事务。