我們可以在mysql事務處理過程中定義儲存點(s**epoint),然後回滾到指定的儲存點前的狀態。
定義儲存點,以及回滾到指定儲存點前狀態的語法如下。
定義儲存點---s**epoint 儲存點名;
回滾到指定儲存點---rollback to s**epoint 儲存點名:
下面演示將向表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> s**epoint 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 s**epoint 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前的狀態。利用儲存點可以實現只提交事務中部分處理的功能。
我們可以在mysql事務處理過程中定義儲存點(s**epoint),然後回滾到指定的儲存點前的狀態。
定義儲存點,以及回滾到指定儲存點前狀態的語法如下。
定義儲存點---s**epoint 儲存點名;
回滾到指定儲存點---rollback to s**epoint 儲存點名:
下面演示將向表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> s**epoint 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 s**epoint 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前的狀態。利用儲存點可以實現只提交事務中部分處理的功能。
Redis 對事務部分支援和訂閱
乙個佇列中,一次性,順序性,排他性的執行一系列命令 multi 標記乙個事務端的開始 返回ok,告訴知道了,開啟事務 exec 執行所有事務塊內的事務 discad 取消事務,放棄執行所有事務塊內的事務 watch unwactn key,key 監視乙個或多個key,如果在執行事務之前,key被其...
mysql事務回滾
先收集網上的一些,待仔細測試研究 事務是資料庫更新操作的基本單位,事務回滾是指將該事務已經完成的對資料庫的更新操作撤銷。所謂事務是使用者定義的乙個資料庫操作序列,這些操作要麼全做要麼全不做,是乙個不可分割的工作 單位。例如,在關聯式資料庫中,乙個事務可以是一條sql語句 一組sql語句或整個程式。簡...
MySQL事務和事務回滾
1 定義 一件事從開始發生到結束的整個過程 2 作用 確保資料一致性 3 事務和事務回滾應用 1 mysql中sql命令會自動commit到資料庫 show variables like autocommit 2 事務應用 1 開啟事務 mysql begin mysql 一條或多條sql語句 此時...