MySQL - ROLLBACK TO SAVEPOINT 语句
ROLLBACK TO SAVEPOINT 语句
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/mysql8/MySQL Server 8.0/Uploads/data.csv" into table employee FIELDS TERMINATED BY ',' LINES TERMINATED BY ' '; SAVEPOINT mysavepoint; load xml infile "C:/ProgramData/mysql8/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 |