由于您不了解事务,因此在此时作为解决方案,只需在完成插入后键入“commit”命令即可。并做一些关于“交易”的研究。希望这可以帮助你。
细节都给予如下:
首先是什么交易?
答:
通常情况下,数据库的几个操作形成一个工作逻辑单元。例如 是资金转移。让我们考虑一个有很多部门的大学。每个出发点都有资金,现在你想把一个部门的资金转移到另一个部门,其中一个部门账户(比如说A)被扣除,另一个部门账户(比如说B)被记入贷方。
显然,无论是信用卡还是借记卡都发生,或者两者都不发生,这一点非常重要。也就是说,资金转移必须全部或根本不发生。这种全或无要求被称为原子性。
此外,资金转账的执行必须保持数据库的一致性。也就是说,必须保留A和B的余额总和的值。这种正确性要求被称为一致性。
最后,成功执行资金转移后,帐户A和B的余额的新值必须保持,尽管可能会发生系统故障。这种持久性要求被称为耐久性。
事务是在数据库应用程序中执行单个逻辑 函数的操作的集合。每笔交易均为原子性和一致性的单位。因此,我们要求事务不会违反任何数据库一致性约束。也就是说,如果数据库在事务开始时是一致的,那么当事务成功终止时,数据库必须保持一致。但是,在交易执行期间,可能需要暂时允许不一致,因为A的借记或B的信用必须在另一个之前完成。这种暂时的不一致虽然是必要的,但如果发生故障可能会导致困难。
程序员有责任正确定义各种事务,以保证数据库的一致性。例如,将资金从部门A的账户转移到部门B的账户 的交易可以被定义为由两个单独的程序组成:一个账户A为 ,另一个账户为B账户。这些账户的执行 两个程序一个接一个确实会保持一致性。但是,每个程序本身都不会将数据库从一致状态转换为新的一致状态。因此,这些程序不是交易。
确保原子性和耐久性属性是数据库系统本身(特别是恢复管理器)的责任。在没有 失败的情况下,所有事务成功完成,原子性很容易实现。 但是,由于各种类型的故障,事务可能无法总是成功完成其执行。如果我们要确保原子性属性,失败的事务对数据库的状态不会产生任何影响。 因此,数据库必须恢复到有问题的事务开始执行之前的状态。数据库系统必须在此执行表单故障恢复,即检测系统故障并将数据库恢复到发生故障之前的状态。
最后,当多个事务同时更新数据库时,即使每个单独的事务都是正确的,数据的一致性也可能不再保留。并发控制管理器负责控制并发事务之间的交互,以确保数据库的一致性。事务管理器由并发控制管理器和恢复管理器组成。事务的概念已广泛应用于数据库系统和应用程序中。虽然最初使用交易是在金融应用中,但该概念现在用于电信实时应用以及管理长期活动(如产品设计或管理工作流程)。
现在交易在SQL:
交易控制:
用来控制交易
有下列命令:
COMMIT: to save the changes.
ROLLBACK: to rollback the changes.
SAVEPOINT: creates points within groups of transactions in which to ROLLBACK
SET TRANSACTION: Places a name on a transaction.
事务控制命令只与DML命令中使用INSERT,仅限UPDATE和DELETE。它们不能在创建表或删除它们时使用,因为这些操作是在数据库中自动提交的。
commit命令:
COMMIT命令是用于保存事务调用数据库的变化事务的命令。
自上次COMMIT或ROLLBACK命令以来,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 | 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命令:
ROLLBACK命令是事务性命令用于撤销尚未保存到数据库的事务。
ROLLBACK命令只能用于撤消自上次执行COMMIT或ROLLBACK命令后发生的事务。
为回滚命令的语法如下:
ROLLBACK;
实施例:
考虑客户表具有以下记录:
+----+----------+-----+-----------+----------+
| 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的记录,然后ROLLBACK数据库中的变化。
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_NAME;
该命令仅在创建事务语句中保存点的服务。 ROLLBACK命令用于撤消一组事务。
回滚到一个保存点的语法如下:
ROLLBACK TO SAVEPOINT_NAME;
以下是您计划从CUSTOMERS表中删除三个不同履历的一例。你想创建一个保存点每个删除之前,这样就可以在任何时间,以适当的数据恢复到原来的状态回滚到任何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.
现在,这三个缺失已经发生,说你有CH激怒了你的想法,并决定将ROLLBACK转换为你确定为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.
释放SAVEPOINT命令:
RELEASE SAVEPOINT命令用于删除您创建的SAVEPOINT。
为RELEASE SAVEPOINT的语法如下:
RELEASE SAVEPOINT SAVEPOINT_NAME;
一旦保存点已被释放,就可以不再使用ROLLBACK命令撤消自SAVEPOINT进行交易。 SET TRANSACTION命令:
SET TRANSACTION命令可用于启动数据库事务。该命令用于指定后面的事务的特征。
例如,您可以将事务指定为只读或读写。
的SET TRANSACTION语法如下:
SET TRANSACTION [ READ WRITE | READ ONLY ];
所以,现在如果想看到你已经从净豆制成到SQL加的变化,你必须使用commit命令,反之亦然。有一件事是,如果你只是关闭了sqlplus
窗口,那么它会自动回滚到其起始位置,如果不使用commit
命令,但只需键入exit
从sqlplus
出来,那么它会自动地承诺。但不要这样做,这是一个不好的做法。
让我猜...你开始一个交易,从不提交它? –
抱歉,“提交”是什么? – Green
你需要一些关于[交易]的基础知识(http://www.tutorialspoint.com/sql/sql-transactions.htm) – Aleksej