事务控制命令
事务控制命令仅与DML Commands例如 - 仅限 INSERT、UPDATE 和 DELETE。在创建或删除表时不能使用它们,因为这些操作会自动提交到数据库中。
提交命令
COMMIT 命令是用于将事务调用的更改保存到数据库的事务命令。
COMMIT 命令是用于将事务调用的更改保存到数据库的事务命令。COMMIT 命令将自上次 COMMIT 或 ROLLBACK 命令以来的所有事务保存到数据库。
COMMIT 命令的语法如下。
示例
考虑具有以下记录的 CUSTOMERS 表 -
+----+----------+-----+-----------+----------+
| ID | NAME | AGE | ADDRESS | SALARY |
+----+----------+-----+-----------+----------+
| 1 | Ramesh | 32 | Ahmedabad | 2000.00 |
| 2 | Khilan | 25 | Delhi | 1500.00 |
| 3 | kaushik | 23 | Kota | 2000.00 |
| 4 | Chaitali | 25 | Mumbai | 6500.00 |
| 5 | Hardik | 27 | Bhopal | 8500.00 |
| 6 | Komal | 22 | MP | 4500.00 |
| 7 | Muffy | 24 | Indore | 10000.00 |
+----+----------+-----+-----------+----------+
以下是一个示例,它将从表中删除年龄 = 25 的那些记录,然后提交数据库中的更改。
SQL> DELETE FROM CUSTOMERS
WHERE AGE = 25;
SQL> COMMIT;
因此,表中的两行将被删除,SELECT 语句将产生以下结果。
+----+----------+-----+-----------+----------+
| ID | NAME | AGE | ADDRESS | SALARY |
+----+----------+-----+-----------+----------+
| 1 | Ramesh | 32 | Ahmedabad | 2000.00 |
| 3 | kaushik | 23 | Kota | 2000.00 |
| 5 | Hardik | 27 | Bhopal | 8500.00 |
| 6 | Komal | 22 | MP | 4500.00 |
| 7 | Muffy | 24 | Indore | 10000.00 |
+----+----------+-----+-----------+----------+
回滚命令
ROLLBACK 命令是用于撤消尚未保存到数据库的事务的事务命令。此命令只能用于撤消自上次发出 COMMIT 或 ROLLBACK 命令以来的事务。
ROLLBACK 命令的语法如下:
示例
考虑具有以下记录的 CUSTOMERS 表 -
+----+----------+-----+-----------+----------+
| ID | NAME | AGE | ADDRESS | SALARY |
+----+----------+-----+-----------+----------+
| 1 | Ramesh | 32 | Ahmedabad | 2000.00 |
| 2 | Khilan | 25 | Delhi | 1500.00 |
| 3 | kaushik | 23 | Kota | 2000.00 |
| 4 | Chaitali | 25 | Mumbai | 6500.00 |
| 5 | Hardik | 27 | Bhopal | 8500.00 |
| 6 | Komal | 22 | MP | 4500.00 |
| 7 | Muffy | 24 | Indore | 10000.00 |
+----+----------+-----+-----------+----------+
以下是一个示例,它将从表中删除年龄 = 25 的那些记录,然后回滚数据库中的更改。
SQL> DELETE FROM CUSTOMERS
WHERE AGE = 25;
SQL> ROLLBACK;
因此,删除操作不会影响表,SELECT 语句将产生以下结果。
+----+----------+-----+-----------+----------+
| ID | NAME | AGE | ADDRESS | SALARY |
+----+----------+-----+-----------+----------+
| 1 | Ramesh | 32 | Ahmedabad | 2000.00 |
| 2 | Khilan | 25 | Delhi | 1500.00 |
| 3 | kaushik | 23 | Kota | 2000.00 |
| 4 | Chaitali | 25 | Mumbai | 6500.00 |
| 5 | Hardik | 27 | Bhopal | 8500.00 |
| 6 | Komal | 22 | MP | 4500.00 |
| 7 | Muffy | 24 | Indore | 10000.00 |
+----+----------+-----+-----------+----------+
保存点命令
SAVEPOINT 是事务中的一个点,您可以将事务回滚到某个点而不回滚整个事务。
SAVEPOINT 命令的语法如下所示。
SAVEPOINT SAVEPOINT_NAME;
此命令仅用于在所有事务语句中创建 SAVEPOINT。ROLLBACK 命令用于撤消一组事务。
回滚到 SAVEPOINT 的语法如下所示。
ROLLBACK TO SAVEPOINT_NAME;
以下是您计划从 CUSTOMERS 表中删除三个不同记录的示例。您希望在每次删除之前创建一个 SAVEPOINT,以便您可以随时回滚到任何 SAVEPOINT 以将适当的数据恢复到其原始状态。
示例
考虑具有以下记录的 CUSTOMERS 表。
+----+----------+-----+-----------+----------+
| ID | NAME | AGE | ADDRESS | SALARY |
+----+----------+-----+-----------+----------+
| 1 | Ramesh | 32 | Ahmedabad | 2000.00 |
| 2 | Khilan | 25 | Delhi | 1500.00 |
| 3 | kaushik | 23 | Kota | 2000.00 |
| 4 | Chaitali | 25 | Mumbai | 6500.00 |
| 5 | Hardik | 27 | Bhopal | 8500.00 |
| 6 | Komal | 22 | MP | 4500.00 |
| 7 | Muffy | 24 | Indore | 10000.00 |
+----+----------+-----+-----------+----------+
以下代码块包含一系列操作。
SQL> SAVEPOINT SP1;
Savepoint created.
SQL> DELETE FROM CUSTOMERS WHERE ID=1;
1 row deleted.
SQL> SAVEPOINT SP2;
Savepoint created.
SQL> DELETE FROM CUSTOMERS WHERE ID=2;
1 row deleted.
SQL> SAVEPOINT SP3;
Savepoint created.
SQL> DELETE FROM CUSTOMERS WHERE ID=3;
1 row deleted.
现在三个删除已经发生,让我们假设您已经改变主意并决定回滚到您标识为 SP2 的 SAVEPOINT。因为 SP2 是在第一次删除后创建的,所以最后两次删除被撤消 -
SQL> ROLLBACK TO SP2;
Rollback complete.
请注意,自从您回滚到 SP2 后,只发生了第一次删除。
SQL> SELECT * FROM CUSTOMERS;
+----+----------+-----+-----------+----------+
| ID | NAME | AGE | ADDRESS | SALARY |
+----+----------+-----+-----------+----------+
| 2 | Khilan | 25 | Delhi | 1500.00 |
| 3 | kaushik | 23 | Kota | 2000.00 |
| 4 | Chaitali | 25 | Mumbai | 6500.00 |
| 5 | Hardik | 27 | Bhopal | 8500.00 |
| 6 | Komal | 22 | MP | 4500.00 |
| 7 | Muffy | 24 | Indore | 10000.00 |
+----+----------+-----+-----------+----------+
6 rows selected.
RELEASE SAVEPOINT 命令
RELEASE SAVEPOINT 命令用于删除您创建的 SAVEPOINT。
RELEASE SAVEPOINT 命令的语法如下。
RELEASE SAVEPOINT SAVEPOINT_NAME;
释放 SAVEPOINT 后,您不能再使用 ROLLBACK 命令撤消自上次 SAVEPOINT 以来执行的事务。
SET TRANSACTION 命令
SET TRANSACTION 命令可用于启动数据库事务。此命令用于指定后续事务的特征。例如,您可以将事务指定为只读或读写。
SET TRANSACTION 命令的语法如下。
SET TRANSACTION [ READ WRITE | READ ONLY ];