我在我的表中执行了错误的更新查询。
我忘记在WHERE
子句中添加id字段。
导致所有行都被更新了。
如何恢复?
我没有备份....
我在我的表中执行了错误的更新查询。
我忘记在WHERE
子句中添加id字段。
导致所有行都被更新了。
如何恢复?
我没有备份....
SET autocommit = 0
显式事务是指语句包含在明确定义的事务代码块中 - 对于MySQL来说,这是START TRANSACTION
。它还需要在事务结束时明确执行COMMIT
或ROLLBACK
语句。嵌套事务超出了本主题的范围。
隐式事务与显式事务略有不同。隐式事务不需要明确定义事务。但是,像显式事务一样,它们需要提供COMMIT
或ROLLBACK
语句。
显式事务是最理想的解决方案-它们需要一个语句COMMIT
或ROLLBACK
来完成事务,并且正在发生的事情清楚地说明给其他人阅读,如果有必要的话。如果与数据库进行交互,则隐式事务是可以接受的,但只有在测试结果并彻底确定为有效后才应指定COMMIT
语句。
这意味着您应该使用:
SET autocommit = 0;
START TRANSACTION;
UPDATE ...;
...只有在结果正确时才使用COMMIT;
。
也就是说,UPDATE和DELETE语句通常仅返回受影响的行数,而不是具体细节。将这些语句转换为SELECT语句并审查结果以确保正确性之前再尝试UPDATE/DELETE语句。
DDL(数据定义语言)语句会自动提交 - 它们不需要COMMIT语句。例如:表、索引、存储过程、数据库和视图的创建或更改语句。