由於您不瞭解事務,因此在此時作爲解決方案,只需在完成插入後鍵入「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