2016-03-08 76 views
-1

我正在學習數據庫。我在Windows中安裝了Oracle 12c。然後我創建了一些表格,我已經讀取了表格的值並完成了一些基本的操作。我創建了大約12個表格。現在我的問題是,如果我正在創建任何新表,那麼它顯示錶已成功創建。數據的插入正在工作。現在,如果我從sqlplus創建和插入數據,在SqlDevelopper和NetBeans IDE中,它只顯示錶名,但沒有數據,有時甚至沒有顯示錶名,儘管我已刷新。關閉sqlplus並打開它,如果我試圖檢索數據,它顯示沒有選擇行。但在sql中的describe命令表明存在一個表。爲什麼oracle數據庫不存儲表值?

如果我在SQL-Developper中創建一個新表並在其中插入數據,重新啓動SQLDeveloper後,它只顯示錶名,但沒有數據。並且該表未在netbeans或SQlPlus中顯示。

請任何人告訴我如何解決這個問題。

+1

讓我猜...你開始一個交易,從不提交它? –

+0

抱歉,「提交」是什麼? – Green

+1

你需要一些關於[交易]的基礎知識(http://www.tutorialspoint.com/sql/sql-transactions.htm) – Aleksej

回答

1

由於您不瞭解事務,因此在此時作爲解決方案,只需在完成插入後鍵入「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命令,但只需鍵入exitsqlplus出來,那麼它會自動地承諾。但不要這樣做,這是一個不好的做法。

相關問題