SQL savapoint

SQL savapoint

  • savapoint是与回滚命令一起使用的SQL命令。
  • 它是事务控制语言中的一个命令,用于在表中标记事务。
  • 假设您正在创建一个非常长的表,并且您希望仅回滚到表中的某个特定位置,那么可以使用保存点来实现这一点。
  • 如果您在表中进行了事务处理,您可以将该事务标记为某个名称,稍后,如果您想回滚到该点,可以通过使用事务的名称轻松地完成。
  • 在仅希望回滚表的一小部分而不是整个表时,保存点非常有用。简单来说,我们可以说保存点是SQL中的一个书签。

让我们看一些实际的例子来更清楚地理解这个概念。我们将使用MySQL数据库来编写所有查询。

要在数据库中创建一个表,首先,我们需要选择要在其中创建表的数据库。

mysql> USE dbs;

然后我们将编写一个查询,在选定的数据库’dbs’中创建一个名为student的表。

mysql> CREATE TABLE student(ID INT, Name VARCHAR(20), Percentage INT, Location VARCHAR(20), DateOfBirth DATE);

现在,我们将编写一个查询来在student表中插入多条记录:

mysql> INSERT INTO student(ID, Name, Percentage, Location, DateOfBirth) VALUES(1, "Manthan Koli", 79, "Delhi", "2003-08-20"), (2, "Dev Dixit", 75, "Pune", "1999-06-17"), (3, "Aakash Deshmukh", 87, "Mumbai", "1997-09-12"), (4, "Aaryan Jaiswal", 90, "Chennai", "2005-10-02"), (5, "Rahul Khanna", 92, "Ambala", "1996-03-04"), (6, "Pankaj Deshmukh", 67, "Kanpur", "2000-02-02"), (7, "Gaurav Kumar", 84, "Chandigarh", "1998-07-06"), (8, "Sanket Jain", 61, "Shimla", "1990-09-08"), (9, "Sahil Wagh", 90, "Kolkata", "1968-04-03"); 

SQL savapoint

为了验证学生表中插入了多条记录,我们将执行SELECT查询。

mysql> SELECT *FROM student;
ID Name Percentage Location DateOfBirth
1 Manthan Koli 79 Delhi 2003-08-20
2 Dev Dixit 75 Pune 1999-06-17
3 Aakash Deshmukh 87 Mumbai 1997-09-12
4 Aaryan Jaiswal 90 Chennai 2005-10-02
5 Rahul Khanna 92 Ambala 1996-03-04
6 Pankaj Deshmukh 67 Kanpur 2000-02-02
7 Gaurav Kumar 84 Chandigarh 1998-07-06
8 Sanket Jain 61 Shimla 1990-09-08
9 Sahil Wagh 90 Kolkata 1968-04-03

结果显示,十条记录均成功插入。

要在SQL中使用TCL命令,首先需要使用BEGIN / START TRANSACTION命令启动事务。

mysql> START TRANSACTION;

SQL savapoint

我们将使用SAVEPOINT命令保存我们初始化的事务,以及该保存点的一些特定名称。

mysql> SAVEPOINT ini;

这里,我们已经将初始的事务保存为名称为’ini’的文件。

SQL savapoint

然后,我们决定向现有的学生表中插入一个ID为10的新记录。

mysql> INSERT INTO student VALUES (10, "Saurabh Singh", 54, "Kashmir", "1989-01-06");

SQL savapoint

我们将执行SELECT查询来验证成功插入了ID为十的新记录。

mysql> SELECT *FROM student;
ID Name Percentage Location DateOfBirth
1 Manthan Koli 79 Delhi 2003-08-20
2 Dev Dixit 75 Pune 1999-06-17
3 Aakash Deshmukh 87 Mumbai 1997-09-12
4 Aaryan Jaiswal 90 Chennai 2005-10-02
5 Rahul Khanna 92 Ambala 1996-03-04
6 Pankaj Deshmukh 67 Kanpur 2000-02-02
7 Gaurav Kumar 84 Chandigarh 1998-07-06
8 Sanket Jain 61 Shimla 1990-09-08
9 Sahil Wagh 90 Kolkata 1968-04-03
10 Saurabh Singh 54 Kashmir 1989-01-06

为了保存与这条新插入记录相关的事务,我们将创建一个新的保存点。

mysql> SAVEPOINT ins;

SQL savapoint

在这里,新插入的记录表被保存在名为’ins’的保存点中。

要更新学生表中ID为1的记录,并将更新后的姓名设置为’Mahesh Kuwar’,我们将执行以下查询:

mysql> UPDATE student SET Name = "Mahesh Kuwar" WHERE ID =1;

SQL savapoint

为了确认记录ID为1的名称字段已成功更新,我们将再次执行SELECT查询。

mysql> SELECT *FROM student;
ID Name Percentage Location DateOfBirth
1 Mahesh Kuwar 79 Delhi 2003-08-20
2 Dev Dixit 75 Pune 1999-06-17
3 Aakash Deshmukh 87 Mumbai 1997-09-12
4 Aaryan Jaiswal 90 Chennai 2005-10-02
5 Rahul Khanna 92 Ambala 1996-03-04
6 Pankaj Deshmukh 67 Kanpur 2000-02-02
7 Gaurav Kumar 84 Chandigarh 1998-07-06
8 Sanket Jain 61 Shimla 1990-09-08
9 Sahil Wagh 90 Kolkata 1968-04-03
10 Saurabh Singh 54 Kashmir 1989-01-06

为了保存使用此更新记录的事务,我们将创建一个新的保存点。

mysql> SAVEPOINT upd;

SQL savapoint

在这里,带有更新记录的表被保存在名为’upd’的保存点上。

要从ID为6的学生表中删除记录,我们将执行以下查询:

mysql> DELETE FROM student WHERE ID= 6;

SQL savapoint

我们将再次执行SELECT查询来验证ID为6的记录是否成功被移除。

mysql> SELECT *FROM student;
ID Name Percentage Location DateOfBirth
1 Mahesh Kuwar 79 Delhi 2003-08-20
2 Dev Dixit 75 Pune 1999-06-17
3 Aakash Deshmukh 87 Mumbai 1997-09-12
4 Aaryan Jaiswal 90 Chennai 2005-10-02
5 Rahul Khanna 92 Ambala 1996-03-04
7 Gaurav Kumar 84 Chandigarh 1998-07-06
8 Sanket Jain 61 Shimla 1990-09-08
9 Sahil Wagh 90 Kolkata 1968-04-03
10 Saurabh Singh 54 Kashmir 1989-01-06

为了保存移除了这条记录的事务,我们将创建一个新的保存点。

mysql> SAVEPOINT del;

SQL savapoint

在这里,带有已删除记录的表以名为“del”的保存点保存。

后来,我们决定需要在前一步骤中删除的学生表中的记录。

由于在每个操作中,我们都创建了一个保存点。利用该保存点,我们可以跳转到事务的任何点。要这样做,我们将执行ROLLBACK命令,并附带我们要跳转的保存点的名称。

mysql> ROLLBACK TO upd;

SQL savapoint

由于我们不希望将ID为6的记录从student表中删除,因此我们需要回滚到名为upd的保存点。

为了验证我们在之前更新student表时所拥有的确切表格,我们将再次执行SELECT查询。

mysql> SELECT *FROM student;
ID Name Percentage Location DateOfBirth
1 Mahesh Kuwar 79 Delhi 2003-08-20
2 Dev Dixit 75 Pune 1999-06-17
3 Aakash Deshmukh 87 Mumbai 1997-09-12
4 Aaryan Jaiswal 90 Chennai 2005-10-02
5 Rahul Khanna 92 Ambala 1996-03-04
6 Pankaj Deshmukh 67 Kanpur 2000-02-02
7 Gaurav Kumar 84 Chandigarh 1998-07-06
8 Sanket Jain 61 Shimla 1990-09-08
9 Sahil Wagh 90 Kolkata 1968-04-03
10 Saurabh Singh 54 Kashmir 1989-01-06

上述结果显示我们已成功回滚到名为’upd’的保存点。

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程