事务是将一个或多个更改打包在一起保存到数据库,事务对于确保数据完整性和处理数据库错误很重要。
事务性质
事务具有以下四个标准属性,通常以首字母缩写 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命令是事务性命令,用于撤消尚未保存到数据库的事务,自上次发出COMMIT或ROLLBACK命令以来,此命令只能用于撤消事务。
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的那些记录,然后回滚数据库中的更改。
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 ];
参考链接
https://www.learnfk.com/sql/sql-transactions.html
标签:+----+----------+-----+-----------+----------+,25,事务,Transactions,SAVEPOINT,无涯,命 From: https://blog.51cto.com/u_14033984/9272819