MySQL事務部分回滾 回滾到指定儲存點

2022-09-14 17:15:12 字數 4687 閱讀 1464

我們可以在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語句 此時...