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命令,它基本上是一个在数据库中撤销上一次事务的命令。它还原旧数据并丢弃新的事务。