MySQL - 回滾到儲存點語句



回滾到儲存點語句

SAVEPOINT 語句用於為具有指定名稱的事務設定儲存點。如果已存在具有給定名稱的儲存點,則將刪除舊的儲存點。

ROLLBACK TO SAVEPOINT 語句類似於 ROLLBACK,只是它撤消當前事務對最後一個命名儲存點所做的所有更改。此語句不會終止事務,而只是恢復修改。

此語句還會刪除在指定儲存點(正在恢復更改的儲存點)之後建立的所有儲存點。

呼叫此語句時,如果不存在具有給定名稱的儲存點,則會生成錯誤。

語法

以下是 MySQL RELEASE SAVEPOINT 語句的語法:

ROLLBACK [WORK] TO [SAVEPOINT] identifier

示例

假設我們使用如下所示的 CREATE 語句建立了一個表:

CREATE TABLE EMPLOYEE(
   FIRST_NAME VARCHAR(20),
   LAST_NAME VARCHAR(20),
   AGE INT,
   INCOME INT);

如果我們有一個包含以下內容的 .csv 檔案和一個 .xml 檔案:

data.xml:

<rowgt;
   <FIRST_NAMEgt;Javed</FIRST_NAMEgt;
   <LAST_NAMEgt;Syed</LAST_NAMEgt;
   <AGEgt;25</AGEgt;
   <INCOMEgt;9855</INCOMEgt;
</rowgt;
<rowgt;
   <FIRST_NAMEgt;Abhinav</FIRST_NAMEgt;
   <LAST_NAMEgt;Gomatam</LAST_NAMEgt; 
   <AGEgt;30</AGEgt;
   <INCOMEgt;7000</INCOMEgt;
</rowgt;

data.csv:

'Krishna','Sharma',19,2000
'Raj','Kandukuri',20,7000

以下 MySQL 事務嘗試將這些檔案的內容插入表中:

START TRANSACTION;

LOAD DATA INFILE "C:/ProgramData/MySQL/MySQL Server 8.0/Uploads/data.csv" 
into table employee
   FIELDS TERMINATED BY ','
   LINES TERMINATED BY '\n';

SAVEPOINT mysavepoint;

load xml infile "C:/ProgramData/MySQL/MySQL Server 8.0/Uploads/data.xml" 
into table employee ROWS IDENTIFIED BY '<row>';

如果驗證上述表的內容,您可以觀察到所有插入的記錄如下:

SELECT * FROM EMPLOYEE;

輸出

上述查詢將產生以下輸出:

FIRST_NAME LAST_NAME AGE INCOME
'Krishna' 'Sharma' 19 2000
'Raj' 'Kandukuri' 20 7000
Javed Syed 25 9855
Abhinav Gomatam 30 7000

以下語句恢復對最後一個儲存點的更改:

ROLLBACK TO SAVEPOINT mysavepoint;

此後,如果驗證內容,您只能看到兩條記錄:

select * FROM EMPLOYEE;

輸出

以下是上述查詢的輸出:

FIRST_NAME LAST_NAME AGE INCOME
'Krishna' 'Sharma' 19 2000
'Raj' 'Kandukuri' 20 7000
廣告