SQL 回滚

SQL 回滚

ROLLBACK 是 SQL 中的一条命令,用于撤销最后在数据库中执行的一组事务。当数据库出现问题时,使用回滚命令变得至关重要,以撤销自上次成功提交以来对数据库所做的所有更改。

当执行回滚命令时,它会将当前事务还原到数据库中。在此之后,数据库将返回到事务开始之前的状态。

ROLLBACK 命令的语法如下:

ROLLBACK;

了解ROLLBACK命令可以使数据库中所有最后使用的事务回滚是很重要的。如果你不想回滚所有事务,可以使用COMMIT命令,该命令可以使成功的事务变为永久性的。Rollback向相反的方向移动,所以它首先撤销上一个事务,然后再撤销其他事务。如果你想回滚最后两个事务,那么你必须在最后两个事务之前使用COMMIT命令。通过这样做,除了最后两个事务外,所有的事务都将变为永久性的。我们将在下面的示例中进一步讨论COMMIT和ROLLBACK命令。

让我们通过以下示例正确理解ROLLBACK命令:

示例1:

假设我们创建了一个名为employee_table的表,它包含emp_id、emp_name、emp_gender、emp_age、emp_city和emp_salary这些字段。

emp_id emp_name emp_gender emp_age emp_city emp_salary
024 Rohan M 20 Agra 15000
025 Vishal M 21 Mumbai 12000
026 Vijay M 20 Bhopal 11000
027 Avni F 25 Dehradun 17000
028 Palak F 24 Agra 18000

我们将使用以下命令从employee_table中删除一些数据,

DELETE from employee_table
WHERE emp_salary<15000;
SELECT * FROM employee_table;

输出:

正如您所看到的,薪水低于15,000的行已被删除。

emp_id emp_name emp_gender emp_age emp_city emp_salary
024 Rohan M 20 Agra 15000
027 Avni F 25 Dehradun 17000
028 Palak F 24 Agra 18000

现在,我们将使用ROLLBACK命令来撤销在数据库中使用的最后一个命令;我们将使用SELECT命令来查看表格。

ROLLBACK;
SELECT * FROM employee_table;

最终输出:

我们将使用DELETE命令之前的表格。

emp_id emp_name emp_gender emp_age emp_city emp_salary
024 Rohan M 20 Agra 15000
025 Vishal M 21 Mumbai 12000
026 Vijay M 20 Bhopal 11000
027 Avni F 25 Dehradun 17000
028 Palak F 24 Agra 18000

示例2:

让我们考虑另一个名为student_table的表,它包含stu_id、stu_name、stu_gender、stu_age、stu_stream和stu_marks这些字段。

stu_id stu_name stu_gender stu_age stu_stream stu_marks
1 Abhinav M 16 Commerce 90
2 Kaif M 17 Science 82
3 Zara F 17 Science 94
4 Harsh M 18 Commerce 75
5 Ayushi F 17 Science 80

我们将使用以下命令来更新student_table的数据,

UPDATE student_table
SET stu_marks = 85
WHERE stu_id = 2; 
SELECT * FROM student_table;

输出:

如您所见,stu_id = 2的标记已被更新。

stu_id stu_name stu_gender stu_age stu_stream stu_marks
1 Abhinav M 16 Commerce 90
2 Kaif M 17 Science 85
3 Zara F 17 Science 94
4 Harsh M 18 Commerce 75
5 Ayushi F 17 Science 80

现在,我们将使用ROLLBACK命令回滚最后一个命令。

ROLLBACK;
SELECT * FROM student_table;

最终输出:

我们将使用UPDATE命令得到原始的表格。

stu_id stu_name stu_gender stu_age stu_stream stu_marks
1 Abhinav M 16 Commerce 90
2 Kaif M 17 Science 82
3 Zara F 17 Science 94
4 Harsh M 18 Commerce 75
5 Ayushi F 17 Science 80

示例3:

让我们考虑另一个名为customer_table的表,其中包含cust_id、cust_name、cust_gender、cust_age和cust_address的详细信息。

cust_id cust_name cust_gender cust_age cust_address
1 Shreya F 25 Mumbai
2 Raghav M 21 Agra
3 Shakti F 26 Roorkee
4 Ranveer M 24 Faridabad
5 Rubina F 20 Roorkee

现在,我们将使用以下命令来更新customer_table中的数据,

UPDATE customer_table
SET cust_age = 27
WHERE cust_id = 1;
UPDATE customer_table
SET cust_address = 'Lucknow'
WHERE cust_id = 5;
SELECT * FROM customer_table;

输出:

您可以在下面看到更新后的表格。

cust_id cust_name cust_gender cust_age cust_address
1 Shreya F 27 Mumbai
2 Raghav M 21 Agra
3 Shakti F 26 Roorkee
4 Ranveer M 24 Faridabad
5 Rubina F 20 Lucknow

现在,如果您只想回滚最后一条命令,因为它是错误的,那么在最后一条命令之前使用COMMIT命令是必需的,以使成功的事务变为永久,但不包括最后一条命令。

UPDATE customer_table
SET cust_age = 27
WHERE cust_id = 1;
COMMIT;
UPDATE customer_table
SET cust_address = 'Lucknow'
WHERE cust_id = 5;
SELECT * FROM customer_table;

我们将使用ROLLBACK命令来撤销上一条命令。

ROLLBACK;
SELECT * FROM customer_table;

最终输出:

正如您可以在表格中看到的那样,只有最后一个命令被反转。

cust_id cust_name cust_gender cust_age cust_address
1 Shreya F 27 Mumbai
2 Raghav M 21 Agra
3 Shakti F 26 Roorkee
4 Ranveer M 24 Faridabad
5 Rubina F 20 Roorkee

上述讨论的例子帮助您了解ROLLBACK命令的确切作用。

ROLLBACK命令可以由数据库管理系统自动运行,也可以由开发人员手动运行,以便在数据库出现问题时回滚更改。

结论:

在本文中,我们学习了SQL中的ROLLBACK命令,它基本上是一个在数据库中撤销上一次事务的命令。它还原旧数据并丢弃新的事务。

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程