数据一致性
数据一致性是指数据库的数据在每一时刻都是稳定且可靠的状态。而事务是保证数据一致性的主要手段。
事务和锁
- 事务用于保证数据的一致性,它由一组相关的dml语句构成,该组的dml语句要么全部成功,要么全部失败。事务往往一个或多个处理步骤。
- 当执行事务操作时,oracle会在被作用的表上加锁,防止其他用户改变表的结构。
提交事务
使用commit命令用于提交事务,当执行了commit语句后,会确认事务的变化,结束事务,删除保存点,释放锁,其他会话将可以查看到事务变化后的新数据。
回退事务
有时候,可能有少量的工作出现异常并需要回滚,就可以利用savepoint在事务中建立标记点,并允许用户只回滚标记点之后的动作。
事务中几个重要操作
- 设置保存点 savepoint a
- 取消部分事务 rollback to a
- 取消全部事务 rollback
java程序使用事务
//事务处理
import java.sql.*;
public class oracle_3 {
public static void main(String[] args) {
// TODO 自动生成的方法存根
Connection ct =null;
try {
Class.forName("oracle.jdbc.driver.OracleDriver");
ct=DriverManager.getConnection("jdbc:oracle:thin:@127.0.0.1:1521:LIYUANYAO","scott","tiger");
//加入事务处理
ct.setAutoCommit(false);
Statement sm=ct.createStatement();
//给scott中的student表中的小张的sal减去100
sm.executeUpdate("update student set sal=sal-100 where sname = '小张'");
//给小李加上500
sm.executeUpdate("update student set sal=sal+500 where sname ='小李'");
//提交事务
ct.commit();
sm.close();
ct.close();
}catch(Exception e)
{
//如果发生异常,就回滚
try {
ct.rollback();
} catch (SQLException e1) {
// TODO 自动生成的 catch 块
e1.printStackTrace();
}
e.printStackTrace();
}
}
}
只读事务
只读事务是只允许执行查询的操作。
设置只读事务
set transaction read only
一旦将事务设置为只读,那么事务开始执行时,事务本身不可能修改数据库,而其他事务对于数据库的修改,对于当前事务来说,都是透明的。也就是说,在该事务的执行过程中,数据库的状态与事务开始的状态一致。
for example:
我们用system登录数据库,设置只读事务。然后再用scott用户登录,在emp表进行增加记录,然而当我们再用system登录时,查询scott的emp表,是看不到增加的记录的,看到的只是scott的emp表的原始状态。