SQL - Transactions(事务)

SQL - Transactions(事务) 首页 / SQL入门教程 / SQL - Transactions(事务)

事务是将一个或多个更改打包在一起保存到数据库,事务对于确保数据完整性和处理数据库错误很重要。

事务性质

事务具有以下四个标准属性,通常以首字母缩写 ACID 表示。

  • 原子性 - 确保工作单元内的所有操作均成功完成,否则,事务将在失败时中止,并且所有先前的操作都将还原到以前的状态。

  • 一致性 - 确保成功提交事务后数据库正确更改状态。

  • 隔离性 - 使事务能够独立运行并且彼此透明。

  • 持久性 - 确保在系统故障的情况下持久化已提交事务的输出或效果。

事务控制

以下命令用于控制事务。

无涯教程网

  • COMMIT                         - 提交事务。

  • ROLLBACK                     - 回滚事务。

  • SAVEPOINT                    - 在要进行回滚的事务组内创建点。

  • SET TRANSACTION   - 在事务中设置名称。

COMMIT命令

COMMIT命令是用于将事务调用的更改保存到数据库的事务性命令。

COMMIT命令的语法如下。

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 | Learnfk    |  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 | Learnfk    |  24 | Indore    | 10000.00 |
+----+----------+-----+-----------+----------+

ROLLBACK命令

ROLLBACK命令是事务性命令,用于撤消尚未保存到数据库的事务,自上次发出COMMITROLLBACK命令以来,此命令只能用于撤消事务。

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 | Learnfk    |  24 | Indore    | 10000.00 |
+----+----------+-----+-----------+----------+

下面是一个示例,该示例将从表中删除年龄为25的那些记录,然后回滚数据库中的更改。

链接:https://www.learnfk.comhttps://www.learnfk.com/sql/sql-transactions.html

来源:LearnFk无涯教程网

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 | Learnfk    |  24 | Indore    | 10000.00 |
+----+----------+-----+-----------+----------+

SAVEPOINT 命令

当您可以将事务回滚到特定点而不回滚整个事务时,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 | Learnfk    |  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 | Learnfk    |  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 ];

祝学习愉快!(内容编辑有误?请选中要编辑内容 -> 右键 -> 修改 -> 提交!)

技术教程推荐

推荐系统三十六式 -〔刑无刀〕

机器学习40讲 -〔王天一〕

Service Mesh实战 -〔马若飞〕

Python自动化办公实战课 -〔尹会生〕

说透5G -〔杨四昌〕

快速上手C++数据结构与算法 -〔王健伟〕

零基础GPT应用入门课 -〔林健(键盘)〕

结构沟通力 -〔李忠秋〕

工程师个人发展指南 -〔李云〕

好记忆不如烂笔头。留下您的足迹吧 :)