您的位置:首页 > 数据库 > MySQL

MySQL —— JDBC 事务详解

2017-07-19 14:00 204 查看
一、概念

事务(Transaction)是访问并可能更新数据库中各种数据项的一个程序执行单元(unit)。事务通常由高级数据库操纵语言或编程语言(如

SQL,C++或Java)书写的用户程序的执行所引起,并用形如 begin transaction 和 end transaction 语句(或函数调用)来界定。事

务由事务开始(begin transaction)和事务结束(end transaction)之间执行的全体操作组成。

例如:在关系数据库中,一个事务可以是一条SQL语句,一组SQL语句或整个程序。

1、事务的特性

原子性(atomicity):

事务是数据库的逻辑工作单位,而且是必须是原子工作单位,对于其数据修改,要么全部执行,要么全部不执行。

一致性(consistency):

事务在完成时,必须是所有的数据都保持一致状态。在相关数据库中,所有规则都必须应用于事务的修改,以保持所有数据的完整性。

隔离性(isolation):

一个事务的执行不能被其他事务所影响。

持久性(durability):

一个事务一旦提交,事物的操作便永久性的保存在DB中。即使此时再执行回滚操作也不能撤消所做的更改。

2、commit 与 rollback

Commint表示提交,即提交事务的所有操作。具体地说就是将事务中所有对数据的更新写回到磁盘上的物理数据库中去,事务正常结束。

Rollback表示回滚,即在事务运行的过程中发生了某种故障,事务不能继续进行,系统将事务中对数据库的所有已完成的操作全部撤消,滚回到事务开始的状态。

自动提交事务:

每条单独的语句都是一个事务。每个语句后都隐含一个commit。 (默认)

显式事务:

以begin transaction显示开始,以commit或rollback结束。

隐式事务:

当连接以隐式事务模式进行操作时,sql server数据库引擎实例将在提交或回滚当前事务后自动启动新事务。无须描述事物的开始,只需提交或回滚每个事务。但每个事务仍以commit或rollback显式结束。连接将隐性事务模式设置为打开之后,当数据库引擎实例首次执行下列任何语句时,都会自动启动一个隐式事务:alter table,insert,create,open ,delete,revoke ,drop,select, fetch ,truncate
table,grant,update在发出commit或rollback语句之前,该事务将一直保持有效。在第一个事务被提交或回滚之后,下次当连接执行以上任何语句时,数据库引擎实例都将自动启动一个新事务。该实例将不断地生成隐性事务链,直到隐性事务模式关闭为止。

二、JDBC 中事务的使用

conn.setAutoCommit(0);//修改系统非自动提交。

conn.commit();//事务提交

conn.rollback();//事务回滚

SavePoint sp=con.setSavePoint();//设置保存点

conn.rollback(sp);//返回保存点

conn.setTransactionIsolation();//设置隔离级别

conn.getTransactionIsolation();//获取隔离级别
其中,JDBC 定义了 5 种隔离级别:

TRANSACTION_NONE JDBC:驱动不支持事务

TRANSACTION_READ_UNCOMMITTED :允许脏读、不可重复读和幻读。

TRANSACTION_READ_COMMITTED :禁止脏读,但允许不可重复读和幻读。

TRANSACTION_REPEATABLE_READ: 禁止脏读和不可重复读,单运行幻读。

TRANSACTION_SERIALIZABLE :禁止脏读、不可重复读和幻读。


部分代码示例:

private Connection conn = null;

private PreparedStatement ps = null;

try {

conn.setAutoCommit(false);  	//将自动提交设置为false,默认为true

ps.executeUpdate("修改SQL"); 	//执行修改操作

ps.executeQuery("查询SQL");  	//执行查询操作

conn.commit();      		//当两个操作成功后手动提交

} catch (Exception e) {
conn.rollback();    		//一旦其中一个操作出错都将回滚,使两个操作都不成功
e.printStackTrace();

}


参考日志:http://www.cnblogs.com/azhqiang/p/4044127.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  事务 JDBC