mysql 中 rollback 仿佛不好使
mysql 中 rollback 好像不好使
------解决方案--------------------
你得先执行事务才能回滚,它俩是配套的
------解决方案--------------------
要先 begin; 然后执行sql语句 然后rollback 那begin后面的sql语句才回滚
你都没begin 根本不算是执行事物 rollback没用...
------解决方案--------------------
如果你不使用 SET AUTOCOMMIT=0,MySQL 将会在一个会话中打开自动提交模式。在自动提交模式下,如果一条 SQL 语句没有返回任何错误,MySQL 将在这条 SQL 语句后立即提交。前面的语句已经提交了,ROLLBACK自然就没用了。
------解决方案--------------------
已经commit掉的sql就不能在rollback了。
------解决方案--------------------
一般都这样写
.BenginTransaction
for(...)
{
sql...
.RollbackTransaction
}
.CommitTransaction
mysql> select*from student;
+------+------+------+------+
| 姓名 | 语文 | 数学 | 英语 |
+------+------+------+------+
| 张三 | 1 | 1 | 1 |
| 李四 | 2 | 2 | 2 |
+------+------+------+------+
2 rows in set (0.07 sec)
mysql> delete from student where 姓名 ='张三';
Query OK, 1 row affected (0.05 sec)
mysql> select*from student;
+------+------+------+------+
| 姓名 | 语文 | 数学 | 英语 |
+------+------+------+------+
| 李四 | 2 | 2 | 2 |
+------+------+------+------+
1 row in set (0.00 sec)
mysql> rollback;
Query OK, 0 rows affected (0.00 sec)
mysql> select*from student;
+------+------+------+------+
| 姓名 | 语文 | 数学 | 英语 |
+------+------+------+------+
| 李四 | 2 | 2 | 2 |
+------+------+------+------+
1 row in set (0.00 sec)
------解决方案--------------------
你得先执行事务才能回滚,它俩是配套的
------解决方案--------------------
要先 begin; 然后执行sql语句 然后rollback 那begin后面的sql语句才回滚
你都没begin 根本不算是执行事物 rollback没用...
------解决方案--------------------
如果你不使用 SET AUTOCOMMIT=0,MySQL 将会在一个会话中打开自动提交模式。在自动提交模式下,如果一条 SQL 语句没有返回任何错误,MySQL 将在这条 SQL 语句后立即提交。前面的语句已经提交了,ROLLBACK自然就没用了。
------解决方案--------------------
已经commit掉的sql就不能在rollback了。
------解决方案--------------------
一般都这样写
.BenginTransaction
for(...)
{
sql...
.RollbackTransaction
}
.CommitTransaction