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 中事务的使用
部分代码示例:
参考日志:http://www.cnblogs.com/azhqiang/p/4044127.html
事务(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
相关文章推荐
- JAVAWEB开发之事务详解(mysql与JDBC下使用方法、事务的特性、锁机制)和连接池的详细使用(dbcp以c3p0)
- Mysql事务详解
- tomcat5.0+mysql配置JDBCRealm,DBCP,ssl,及中文乱码解决详解
- mysql 事务处理,事务操作,JDBC中事务的使用,事务的sql语句,
- MySQL 线上执行大事务 or 锁表操作 详解
- MyBatis JdbcType 与Oracle、MySql数据类型对应关系详解
- tomcat5.0+mysql配置JDBCRealm,DBCP,ssl,及中文乱码解决详解资料
- Mysql加锁过程详解(4)-select for update/lock in share mode 对事务并发性影响
- MySQL JDBC事务处理、封装JDBC工具类
- mysql dba系统学习(22)数据库事务详解
- mysql事务处理用法与实例详解
- 今天自己写的MySQL自定义JDBCUtils代码编写过程详解.
- mysql的XA事务恢复过程详解
- Java的JDBC事务详解
- 分页详解jsp+servlet+jdbc+mysql
- mysql事务详解和实例讲解
- Java的JDBC事务详解
- JDBC和数据库事务详解(二)
- Java与Oracle实现事务(JDBC事务)实例详解
- sql学习笔记(24)----------MySQL的事务处理详解