事务具有以下四个标准属性,通常由首字母缩写ACID简称:
原子: 确保工作单元中的所有操作都成功完成; 否则,该事务被中止的故障点,操作回滚到操作之前的状态。
一致性: 确保数据库正确后成功提交事务更改状态。
**隔离: **事务操作彼此独立和透明。
持久性: 可确保提交的事务的结果或仍然存在系统故障的情况下的作用。
1.COMMIT命令:
COMMIT命令是用于保存由事务引用的数据库改变的事务命令。
COMMIT命令保存所有事务在数据库自上次COMMIT或ROLLBACK命令。
COMMIT命令的语法如下:
COMMIT;
删除age = 25的记录,然后提交更改在数据库中的例子。
SQL> DELETE FROM CUSTOMERS
WHERE AGE = 25;
SQL> COMMIT;
2.ROLLBACK命令:
ROLLBACK命令是用来撤消尚未被保存到数据库事务的事务命令。
ROLLBACK命令只能撤消事务,因为发出的最后一个COMMIT或ROLLBACK命令。
ROLLBACK命令的语法如下:
SQL> DELETE FROM CUSTOMERS
WHERE AGE = 25;
SQL> ROLLBACK;
3.保存点SAVEPOINT
可以回滚事务到某一事务节点,而不回滚整个事务。
SAVEPOINT命令的语法如下:
SAVEPOINT SAVEPOINT_NAME;
考虑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;
Saveyiibai created.
SQL> DELETE FROM CUSTOMERS WHERE ID=1;
1 row deleted.
SQL> SAVEPOINT SP2;
Saveyiibai created.
SQL> DELETE FROM CUSTOMERS WHERE ID=2;
1 row deleted.
SQL> SAVEPOINT SP3;
Saveyiibai 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.
3.RELEASE SAVEPOINT命令:
RELEASE SAVEPOINT命令用于删除已经创建的一个SAVEPOINT。
RELEASE SAVEPOINT的语法如下:
RELEASE SAVEPOINT SAVEPOINT_NAME;
4.SET TRANSACTION 命令:
SET TRANSACTION命令可以被用来启动一个数据库事务。该命令用于指定随后的事务特性。
例如,可以指定一个事务是只读的,或读写。
SET TRANSACTION的语法如下:
SET TRANSACTION [ READ WRITE | READ ONLY ];
只读事务
在整个事务中的数据在事务开始时就决定,即使有其他会话在事务周期内修改并提交数据,也不会影响事务。可以认为在只读事务周期内,其他事务的对数据的改变就像不存在一样。