事务是指由一个或者多个SQL语句组成的工作单元,这个单元中SQL语句只要有一个SQL语句执行失败,就会撤销整个工作单元。
事务的成功取决于工作单元的所有SQL语句都执行成功,它必须具备ACID特征,ACID是Atomic(原子性)、Consistency(一致性)、Isolation(隔离性)和持久性(Durability),它们的含义是:
(1)
(2)
(3)
(4)
2声明事务边界
在mysql.exe程序中声明事务
(1)
(2)
1.
2.
3.
如以下的银行转帐事务
begin transaction
set @errorSum=0
update bank set currentMoney=currentMoney-1000 where customerName=’张三’
set @errorSum=@errorSum+@@error--@@error是系统的全局变量.
update bank set currentMoney=currentMoney+1000 where customerName=’李四’
set @errorSum=@errorSum+@@error
if @errorSum<>0
else
通过JDBC API声明事务边界
(1)
(2)
(3)
try{
con.setAutoCommit(false);//设置为手工提交模式
stmt=con.createStatement();
stmt.executeUpdate(“update ACCOUNTS set BALANCE=1000-100 where ID=1”);
stmt.executeUpdate(update ACCOUNTS set BALANCE=0+100 where ID=2”)
con.commit();//提交事务
}catch(SQLException e){
con.rollback();//不成功就撤销事务.这语句也要捕获异常,代码略
}finally{
stmt.close();
con.close();//.这语句也要捕获异常,代码
}
通过Hibernate API声明事务边界
(1)
(2)
(3)
Session session=sessionFactory.openSession();
Transaction tx;
try{
tx=session.beginTransaction();//开始一个事务
….//执行一些操作
tx.commit();//提交事务
}catch(Exception e){
tx.rollback();//撤销事务。这个语句也要捕获异常,代码略
}finally{
session.close();//撤销事务。这个语句也要捕获异常,代码略
}
try{
tx1=session.beginTransaction();
….//执行一些操作
tx1.commit();//提交事务
session.desconnect();//释放数据连接
….//执行一些操作,这些操作不属于任何事务
session.reconnnect();//重新获得数据库连接
tx2=session.beginTranction();//开始第二个事务
….// 执行一些操作
tx2.commit();//提交第二个事务
}catch(Exception e){
if(tx1!=null)tx1.rollback();
if(tx2!=null)tx2.rollback();
}finally{
session.close();
}