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
广告
© . All rights reserved.