1. 程式人生 > >Oracle的表創建和事務管理

Oracle的表創建和事務管理

有效 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的表創建和事務管理