JDBC事务

事务的四大特性(ACID)

  1. 原子性(Atimicty):事务中所有操作都是不可分割的原子单位。事务中所有操作要么全部成功,要么全部失败。
  2. 一致性(Consistency):事务执行后,数据库状态与其它业务规则保持一致。如转账业务中,无论事务是否成功,参与转账的两个账号余额之和是不变的。
  3. 隔离性(Isolation):隔离性是指在并发操作中,不同事务之间应该隔离开来,使每个并发中的事务不会互相干扰。
  4. 持久性(Durability):一旦事务提交成功,事务中所有的数据操作都必须被持久化到数据库中,即使提交业务后,数据库马上崩溃,在数据库重启时,也必须能保证通过某种机制恢复数据。

MYSQL中的事务

  • 开启事务:start transaction
  • 关闭事务:comment:提交结束事务
  • rollback:事务的回滚(撤销对事务的操作)

JDBC中的事务

同一个事务中所有操作,都在使用同一个Connection对象!

Connection的三个方法与事务相关:

  • setAutoCommit(boolean):设置是否为自动提交事务,如果true(默认值就是true)表示自动提交,也就是每条执行的SQL语句就是一个单独的事务,如果设置false,那么就相当于开启了事务;con.setAutoCommit(false)表示开启事务
  • commit():提交结束事务;con.commit();表示提交事务
  • rollback():回滚结束事务。con.rollback();表示回滚事务

jdbc中处理事务的代码格式:

	try{
				con.setAutoCommit(false);//开启事务
				.............
				.............
				con.commit();//try的最后提交事务
			}catch(){
				con.rollback();//回滚事务
			}

事务隔离级别

  1. 事务的并发读问题
    脏读:读取到另一个事务未提交更新数据,即读取到了脏数据;
    不可重复读:对同一记录的两次读取不一致,因为另一事物对该记录做了修改;
    幻读(虚读):对同一张表的两次查询不一致,因为零壹拾伍插入了一条记录;
  2. 四大隔离级别
    四个等级的事务隔离级别,在相同数据环境下,使用相同的输入,执行相同的工具,根据不同的隔离级别,可以导致不同的结果。不同事务隔离级别能够解决的数据并发问题的能力是不同的。
    • SERIAUZABLE(串行化)
      不会出现任何并发性问题,因为它是对同一数据的访问是串行的,非并发访问的。
      性能最差

    • REPEATABLEREAD(可重复读)(mysql)
      防止脏读和不可重复读,不能处理幻读问题。
      性能比SERIAUZABLE好

    • READCOMMITTED(读已提交数据)(Oracle)
      防止脏读,没有处理不可重复读,也没有处理幻读。
      性能比REPEATABLEREAD。

    • READUNCOMMITTED(读未提交数据)
      可能出现任何事物并发问题
      性能最好

jdbc设置隔离级别

con.setTransactionIsolation(int level)

可选参数值如下:

			Connection.TRANSACTION_READ_UNCOMMITTED;
			Connection.TRANSACTION_READ_COMMITTED;
			Connection.TRANSACTION_REPEATABLE_READ;
			Connection.TRANSACTION_SERIALIZABLE.

事务总结:

事务的特性:ACID;
事务开始边界与结束边界:开始边界(con.setAutoCommit(false)),结束边界(con.commit()或com.rollback());
事务的蛤蜊级别:SERIAUZABLE  REPEATABLEREAD   READCOMMITTED  READUNCOMMITTED。多个事务并发执行时才需要考虑并发事务。

你可能感兴趣的:(JDBC事务)