MySQL - SAVEPOINT 语句
MySQL SAVEPOINT 语句
保存点是事务中的逻辑回滚点。设置保存点后,每当在保存点之后发生错误时,都可以使用回滚功能撤消在保存点之前执行的操作。
MySQL InnoDB 支持 SAVEPOINT、ROLLBACK TO SAVEPOINT 和 RELEASE SAVEPOINT 语句。
SAVEPOINT 语句用于为指定名称的事务设置保存点。如果指定名称的保存点已存在,则旧保存点将被删除。
语法
以下是 MySQL SAVEPOINT 语句的语法 -
SAVEPOINT identifier(标识符)
示例
MySQL 会保存每条语句执行后所做的更改。要自动保存更改,请设置自动提交选项,如下所示 -
SET autocommit=0;
假设我们在 MySQL 中创建了一个名为 EMPLOYEES 的表,如下所示 -
CREATE TABLE EMP( FIRST_NAME CHAR(20) NOT NULL, LAST_NAME CHAR(20), AGE INT, SEX CHAR(1), INCOME FLOAT);
我们使用 INSERT 语句向其中插入 4 条记录,如下所示:-
INSERT INTO EMP VALUES ('Krishna', 'Sharma', 19, 'M', 2000), ('Raj', 'Kandukuri', 20, 'M', 7000), ('Ramya', 'Ramapriya', 25, 'F', 5000);
事务更新后,emp 表中所有员工的年龄值将更新为 -
START TRANSACTION; SELECT * FROM EMP; UPDATE EMP SET AGE = AGE + 1; SAVEPOINT samplesavepoint; INSERT INTO EMP ('Mac', 'Mohan', 26, 'M', 2000); ROLLBACK TO SAVEPOINT samplesavepoint; COMMIT;
如果您检索表格的内容,您可以看到更新的值 -
SELECT * FROM EMP;
输出
上述查询产生以下输出 -
FIRST_NAME | LAST_NAME | AGE | SEX | INCOME |
---|---|---|---|---|
Krishna | Sharma | 20 | M | 2000 |
Raj | Kandukuri | 21 | M | 7000 |
Ramya | Ramapriya | 26 | F | 5000 |