事务及事务操作

来源:互联网 发布:淘宝刷销量怎么查 编辑:程序博客网 时间:2024/05/16 15:50

1、 什么是事务

事务是用于保证数据的一致性,它由一组相关的DML语句组成,该组的DML语句要么全部成功,要么全部失败。如:网上转账……

2、 事务和锁

当执行事务操作(dml语句)时,oracle会在被作用的表上加锁,防止其他用户改变表的结构,这点对我们用户来讲是很重要的。

3、 保存点和回退事务

保存点是事务中的一点,用于取消部分事务,当结束事务时,会自动的删除该事务定义的所有保存点,当执行rollback时,通过指定保存点可以回退到指定的点。

4、 提交事务

使用commit语句可以提交事务,当执行了commit语句后,会确认事务的变化、结束事务、删除保存点、释放锁、当使用commit语句结束事务后,其它会话将可以查看到事务变化后的新数据。

5、 如何在Java中操作事务呢

其实很简单,oracle是默认自动提交事务的,那么我们只要在执行事务语句之前取消自动提交,执行事务的语句过后再手动提交就可以了

假设我这有一个Connection对象的实例conn,调用这个函数:

conn.setAutoCommit(false);就可以取消自动提交了,然后我们执行一系列的中间不能打断的DML语句,完了再在最后加上这么一句:conn.commit();就可以了,如果一旦发生异常,在catch语句块中加上conn.rollback();就OK了。

6、 只读事务

只读事务是指只允许执行查询的操作,而不允许执行任何其它DML操作的事务,使用只读事务可以确保用户只能取得某时间点的数据。假定机票代售点每天18点统计今天的销售情况,这时可以使用只读事务,在设置了只读事务后,尽管其它会话可能会提交新的事务,但是只读事务将不会取得最新数据的变化,从而可以保证取得特定时间点的数据信息。

7、 设置只读事务

Set transaction read only

 

Oracle的一个事务是以第一个可执行的SQL语句开始,当下列事件之一发生时结束。

用户执行了commit语句(提交)

用户执行了rollback语句(回滚)

用户执行了DDL语句(该类型的语句是自动提交)

用户执行了DCL语句(该类型的语句是自动提交)

用户正常退出SQL*PLUS(自动提交)

用户非正常退出SQL*PLUS(自动回滚)

系统崩溃,包括硬件或软件故障(自动回滚)

其中,直接单击SQL*PLUS窗口的关闭按钮属于非正常退出。

     单独或结合使用disconn或exit 命令属于正常退出。

 

 

Set autocommit on/off   开启或关闭自动提交功能

 

注:

在进行事务处理中,oracle数据库系统采取了这样一种方式:即有人对数据库进行读写操作(即DML操作)时,Oracle系统是允许其他人进行对数据库进行读操作的。这是因为Oracle有一个或多个称为回滚段的磁盘区,当有人对数据库中的数据进行任何写操作(DML操作)时,Oracle数据库首先将原始的数据复制到回滚段中,之后才做相应的操作,在事务处理结束之前其他的用户可以读这些数据,但读的是回滚段上的数据。

 

所以对于要删除大量的数据行的操作时,尽量用truncate语句而不要用delete语句,因为truncate语句属于DDL 语句,不需要使用回滚段。

原创粉丝点击