MySQL - 釋放儲存點語句



RELEASE SAVEPOINT 語句

儲存點是在事務中一個邏輯回滾點。當您設定儲存點時,無論何時在儲存點之後發生錯誤,您都可以使用回滾撤消您在儲存點之前所做的操作。

MySQL InnoDB 支援 SAVEPOINT、ROLLBACK TO SAVEPOINT 和 RELEASE SAVEPOINT 語句。

RELEASE SAVEPOINT 語句刪除指定的儲存點。刪除儲存點後,您無法提交或回滾到該儲存點。如果指定的儲存點不存在,則會生成錯誤。

如果您呼叫 COMMIT 或 ROLLBACK 語句而不指定儲存點的名稱,則當前事務的所有儲存點都將被刪除。

語法

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

RELEASE 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;
SAVEPOINT mysavepoint;
LOAD DATA INFILE "C:/ProgramData/MySQL/MySQL Server 8.0/Uploads/data.csv" 
into table employee
   FIELDS TERMINATED BY ','
   LINES TERMINATED BY '\n';

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

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

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;
ERROR 1305 (42000): SAVEPOINT mysavepoint does not exist
廣告