Oracle的表创建和事务管理

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,那么将该池子内容恢复到实例池中即可。
posted @ 2017-10-06 00:10  染红の街道  阅读(1284)  评论(0编辑  收藏  举报