MySQL - ROLLBACK 语句
一般来说,事务是按逻辑顺序完成的工作单元或序列,可以由用户手动完成,也可以由某种数据库程序自动完成。
数据库事务是指将一个或多个更改作为单个操作传播到数据库。 MYSQL 支持使用 SET autocommit、START TRANSACTION、COMMIT 和 ROLLBACK 语句的事务。
COMMIT 语句保存当前事务中所做的所有修改。
ROLLBACK 语句
ROLLBACK 操作撤消当前事务所做的所有更改。也就是说,如果调用此语句,所有修改都将被还原,直到最后一次提交或 START TRANSACTION 语句为止。
语法
以下是 MySQL ROLLBACK 语句的语法 -
ROLLBACK
示例
MySQL 会在执行每个语句后保存所做的更改。要自动保存更改,请设置自动提交选项,如下所示 -
SET autocommit=0;
假设我们已经使用 CREATE 语句在 MySQL 数据库中创建了一个名为 Players 的表,如下所示 -
CREATE TABLE Players( ID INT, First_Name VARCHAR(255), Last_Name VARCHAR(255), Date_Of_Birth date, Place_Of_Birth VARCHAR(255), Country VARCHAR(255), PRIMARY KEY (ID) );
现在,我们将使用 INSERT 语句在 Players 表中插入 3 条记录 -
Insert into Players values (1, 'Shikhar', 'Dhawan', DATE('1981-12-05'), 'Delhi', 'India'); (2, 'Jonathan', 'Trott', DATE('1981-04-22'), 'CapeTown', 'SouthAfrica'); (3, 'Kumara', 'Sangakkara', DATE('1977-10-27'), 'Matale', 'Srilanka');
以下查询保存更改 -
COMMIT;
现在,让我们使用 INSERT 语句添加更多记录 -
Insert into Players values (4, 'Virat', 'Kohli', DATE('1988-11-05'), 'Delhi', 'India'); (5, 'Rohit', 'Sharma', DATE('1987-04-30'), 'Nagpur', 'India'); (6, 'Ravindra', 'Jadeja', DATE('1988-12-06'), 'Nagpur', 'India'); (7, 'James', 'Anderson', DATE('1982-06-30'), 'Burnley', 'England');
您可以使用 SELECT 语句检索上述创建表的内容,如下所示 -
SELECT * FROM Players;
输出
以下是上述程序的输出 -
ID | First_Name | Last_Name | Date_Of_Birth | Place_Of_Birth | Country |
---|---|---|---|---|---|
1 | Shikhar | Dhawan | 1981-12-05 | Delhi | India |
2 | Jonathan | Trott | 1981-04-22 | CapeTown | SouthAfrica |
3 | Kumara | Sangakkara | 1977-10-27 | Matale | Srilanka |
4 | Virat | Kohli | 1988-11-05 | Delhi | India |
5 | Rohit | Sharma | 1987-04-30 | Nagpur | India |
6 | Ravindra | Jadeja | 1988-12-06 | Nagpur | India |
7 | James | Anderson | 1982-06-30 | Burnley | England |
以下语句将还原上次提交后的更改。
ROLLBACK;
如果我们回滚事务,则上次提交后所做的所有更改都将被还原。由于我们在提交后插入了最后 4 条记录,因此它们将在回滚时被还原。
SELECT * FROM Players;
输出
上述查询产生以下输出 -
ID | First_Name | Last_Name | Date_Of_Birth | Place_Of_Birth | Country |
---|---|---|---|---|---|
1 | Shikhar | Dhawan | 1981-12-05 | Delhi | India |
2 | Jonathan | Trott | 1981-04-22 | CapeTown | SouthAfrica |
3 | Kumara | Sangakkara | 1977-10-27 | Matale | Srilanka |