標籤:http ar 資料 html sp on ef c htm
我們可以在mysql交易處理過程中定義儲存點(SAVEPOINT),然後復原到指定的儲存點前的狀態。
定義儲存點,以及復原到指定儲存點前狀態的文法如下。
- 定義儲存點---SAVEPOINT 儲存點名;
- 復原到指定儲存點---ROLLBACK TO SAVEPOINT 儲存點名:
下面示範將向表user中連續插入3條資料,在插入第2條資料的後面定義一個儲存點,最後看看能否復原到此儲存點。
1、查看user表中的資料
- mysql> select * from user;
- +-----+----------+-----+------+
- | mid | name | scx | word |
- +-----+----------+-----+------+
- | 1 | zhangsan | 0 | NULL |
- | 2 | wangwu | 1 | NULL |
- +-----+----------+-----+------+
- 2 rows in set (0.05 sec)
2、mysql事務開始
- mysql> BEGIN;
- Query OK, 0 rows affected (0.00 sec)
3、向表user中插入2條資料
- mysql> INSERT INTO user VALUES (‘3‘,‘one‘,‘0‘,‘‘);
- Query OK, 1 row affected (0.08 sec)
- mysql> INSERT INTO user VALUES (‘4,‘two‘,‘0‘,‘‘);
- Query OK, 1 row affected (0.00 sec)
- mysql> select * from user;
- +-----+----------+-----+------+
- | mid | name | scx | word |
- +-----+----------+-----+------+
- | 1 | zhangsan | 0 | NULL |
- | 2 | wangwu | 1 | NULL |
- | 3 | one | 0 | |
- | 4 | two | 0 | |
- +-----+----------+-----+------+
- 4 rows in set (0.00 sec)
4、指定儲存點,儲存點名為test
- mysql> SAVEPOINT test;
- Query OK, 0 rows affected (0.00 sec)
5、向表user中插入第3條資料
- mysql> INSERT INTO user VALUES (‘5‘,‘three‘,‘0‘,‘‘);
- Query OK, 1 row affected (0.00 sec)
- mysql> select * from user;
- +-----+----------+-----+------+
- | mid | name | scx | word |
- +-----+----------+-----+------+
- | 1 | zhangsan | 0 | NULL |
- | 2 | wangwu | 1 | NULL |
- | 3 | one | 0 | |
- | 4 | two | 0 | |
- | 5 | three | 0 | |
- +-----+----------+-----+------+
- 5 rows in set (0.02 sec)
6、復原到儲存點test
- mysql> ROLLBACK TO SAVEPOINT test;
- Query OK, 0 rows affected (0.31 sec)
- mysql> select * from user;
- +-----+----------+-----+------+
- | mid | name | scx | word |
- +-----+----------+-----+------+
- | 1 | zhangsan | 0 | NULL |
- | 2 | wangwu | 1 | NULL |
- | 3 | one | 0 | |
- | 4 | two | 0 | |
- +-----+----------+-----+------+
- 4 rows in set (0.00 sec)
我們可以看到儲存點test以後插入的記錄沒有顯示了,即成功團滾到了定義儲存點test前的狀態。利用儲存點可以實現只提交事務中部分處理的功能。
文章來源網頁編程,轉載請註明出處:http://uphtm.com/database/192.html
MySQL事務部分復原-復原到指定儲存點