Oracle的表創建和事務管理
阿新 • • 發佈:2017-10-06
有效 reat 整體 eat 解決 nec pat serializa 二進制文件
Oracle的表創建和事務管理
- CURD,根據查詢結果創建新表
- 事務管理
- 什麽是事務 ,為什麽要用事務
- SQL99事務隔離級別
- Oracle事務隔離級別
- 事務回滾
- 隱式回滾
- 顯示回滾
- 事務提交
- 隱式提交
- 顯示提交
- 事務回滾點
1、CURD、根據select結果創建表
drop table 和 truncate table 和 delete from 區別: drop table 1)屬於DDL 2)不可回滾 3)不可帶where 4)表內容和結構刪除 5)刪除速度快 truncate table 1)屬於DDL 2)不可回滾 3)不可帶where 4)表內容刪除 5)刪除速度快 delete from 1)屬於DML 2)可回滾 3)可帶where 4)表結構在,表內容要看where執行的情況 5)刪除速度慢,需要逐行刪除 根據select創建表,例如: create table test2 as select * from emp; 也可以只創建表結構而不要數據: create table test3 as select * from emp where 1 = 2;
2、Oracle的事務管理
##2.1##事務? 什麽是事務? 一個不可分割的子操作形成一個整體,該整體要麽全部執行成功,要麽全部執行失敗。例如:轉帳 為什麽要用事務? 如果不用事務的話,為轉帳為例,可能出現一個用戶錢增加了,另一個用戶錢不變 編程中,事務可用於哪一層? 事務放在業務層 jdbc編程中,如何使用事務? connection.setAutoCommit(false); pstmt.executeUpdate(); connection.commit(); connection.rollback(); hibernate編程中,如何使用事務? transaction.begin(); session.save(new User()); transaction.commit(); transaction.rollback(); spring編程中,如何使用事務? spring可以分為二種 >編程式事務,藕合 >聲明式事務,解藕,提倡
##2.2##SQL99事務隔離級別
(1)read uncommitted -- 不能解決任何缺點
(2)read committed -- 臟讀,Oracle默認
(3)reapatable read -- 不可重復讀,臟讀,MySQL默認
(4)serializable -- 幻讀,不可重復讀,臟讀,效率低
##2.2##SQL99事務隔離級別 (1)read committed -- 臟讀,Oracle默認 (2)serializable -- 幻讀,不可重復讀,臟讀,效率低 (3)read only -- 只讀模式 Oracle中修改事務隔離級別: set transaction isolation level serializable; 修改成串行模式
##2.3##事務回滾
(1)顯示回滾:rollback
(2)隱藏回滾:關閉窗口(sqlplus工具),死機,掉電
註意:回滾到事務開始的地方
##2.4##事務提交
Oracle的提交事務
(1)顯示提交:commit
(2)隱藏提交:DDL/DCL/exit(sqlplus工具)
註意:提交是的從事務開始到事務提交中間的內容,提交到ORCL數據庫中的DBF二進制文件
##2.5##什麽是回滾點?
在操作之間設置的一個標誌位,用於將來回滾之用
為什麽要設置回滾點?savepoint a;rollback to savepoint a;
如果沒有設置回滾點的話,Oracle必須回滾到事務開始的地方,其間做的一個正確的操作也將撤銷
使用savepoint 回滾點,設置回滾點a
savepoint a;
使用rollback to savepoint,回滾到回滾點a處
rollback to savepoint a;
Oracle提交或回滾後,原來設置的回滾點還有效嗎?
原回滾點無效了
Oracle之所以能回滾的原因是?
主要機制是實例池,用戶在一個事務中的所有操作都保存在一個特殊的池子中
如果commit(執行DDL,DCL語句也相當於commit),那麽該池子就清空,並且修改本地二進制數據庫文件。
如果rollback,那麽將該池子內容恢復到實例池中即可。
Oracle的表創建和事務管理