savepoint 配合rollback 使用,用于事务中,rollbakc to 回滚点 后,savpoint 之后的操作都会被取消,通俗的说,它就好比一个断点,它只会保留该点以前的操作,以后的什么操作它不管。
1.初始状态
mysql> select * from emp;
+----+--------+---------+
| id | name | salary |
+----+--------+---------+
| 1 | zs | 130.00 |
| 2 | 李四 | 3330.00 |
+----+--------+---------+
2 rows in set (0.00 sec)
2.开启事务,设置savepoint, 再查看
mysql> set autocommit = 0;
mysql> start transaction;
mysql> update emp set name = '徐庶' where id = 1;
Query OK, 1 row affected (0.00 sec)
Rows matched: 1 Changed: 1 Warnings: 0
mysql> savepoint a;
Query OK, 0 rows affected (0.00 sec)
mysql> update emp set name = '靡芳' where id = 2;
Query OK, 1 row affected (0.00 sec)
Rows matched: 1 Changed: 1 Warnings: 0
mysql> select * from emp;
+----+--------+---------+
| id | name | salary |
+----+--------+---------+
| 1 | 徐庶 | 130.00 |
| 2 | 靡芳 | 3330.00 |
+----+--------+---------+
2 rows in set (0.00 sec)
可以看到两条数据都被修改了。
3.回滚,在查看
mysql> rollback to a;
Query OK, 0 rows affected (0.00 sec)
mysql> select * from emp;
+----+--------+---------+
| id | name | salary |
+----+--------+---------+
| 1 | 徐庶 | 130.00 |
| 2 | 李四 | 3330.00 |
+----+--------+---------+
2 rows in set (0.00 sec)
可以看到回滚点之后的操作都没有生效,回滚点之前的操作还是依然发生了。