文档章节

数据库事务操作

小强斋太
 小强斋太
发布于 2016/11/09 20:06
字数 1180
阅读 2
收藏 0
点赞 0
评论 0

事务(Transaction)是并发控制的基本单位。

    所谓事务,它是一个操作序列,这些操作要么都执行,要么都不执行,它是一个不可分割的工作单位。例如,银行转帐工作:从一个帐号扣款并使另一个帐号增款,这两个操作要么都执行,要么都不执行。

  数据库事务必须具备ACID特性,ACID是Atomic(原子性)、Consistency(一致性)、Isolation(隔离性)和Durability(持久性)的英文缩写。

  原子性:指整个数据库事务是不可分割的工作单位。只有使据库中所有的操作执行成功,才算整个事务成功;事务中任何一个SQL语句执行失败,那么已经执行成功的SQL语句也必须撤销,数据库状态应该退回到执行事务前的状态。

  一致性:指数据库事务不能破坏关系数据的完整性以及业务逻辑上的一致性。例如对银行转帐事务,不管事务成功还是失败,应该保证事务结束后ACCOUNTS表中Tom和Jack的存款总额为2000元。

  隔离性:指的是在并发环境中,当不同的事务同时操纵相同的数据时,每个事务都有各自的完整数据空间。由并发事务所做的修改必须与任何其他并发事务所做的修改隔离。事务查看数据更新时,数据所处的状态要么是另一事务修改它之前的状态,要么是另一事务修改它之后的状态,事务不会查看到中间状态的数据

  持久性:指的是只要事务成功结束,它对数据库所做的更新就必须永久保存下来。即使发生系统崩溃,重新启动数据库系统后,数据库还能恢复到事务成功结束时的状态。

  事务的(ACID)特性是由关系数据库管理系统(RDBMS,数据库系统)来实现的。数据库管理系统采用日志来保证事务的原子性、一致性和持久性。日志记录了事务对数据库所做的更新,如果某个事务在执行过程中发生错误,就可以根据日志,撤销事务对数据库已做的更新,使数据库退回到执行事务前的初始状态。

  数据库管理系统采用锁机制来实现事务的隔离性。当多个事务同时更新数据库中相同的数据时,只允许持有锁的事务能更新该数据,其他事务必须等待,直到前一个事务释放了锁,其他事务才有机会更新该数据。

 

数据库事务操作,取消自动提交,conn.setAutoCommit(false) ;执行sql语句,如果有异常的话,回滚conn.rollback() ;

<%@ page contentType="text/html;charset=gb2312"%>
<%@ page import="java.sql.*"%>
<%--
	此代码主要进行查询操作
--%>
<%!
	// 定义数据库驱动程序
	String DBDRIVER = "sun.jdbc.odbc.JdbcOdbcDriver" ;
	// 定义数据库连接地址
	String DBURL = "jdbc:odbc:mldn" ;

	// 定义数据库连接对象,属于java.sql包中的接口
	Connection conn = null ;

	// 定义Statement对象,用于操作数据库
	Statement stmt = null ;

	// 定义一字符串变量,用于保存SQL语句
	String sql = null ;

	// 查询返回的结果集对象
	ResultSet rs = null ;
%>
<%
	// 1、加载驱动程序
	try
	{
		Class.forName(DBDRIVER) ;
	}
	catch(Exception e)
	{
		// 此处使用out.print是处于演示目的,在实际开发中所有的错误消息,绝对不能够通过out.print打印,否则会存在安全问题
		out.println("数据库驱动程序加载失败!!!") ;
	}

	// 2、连接数据库
	try
	{
		conn = DriverManager.getConnection(DBURL) ;
	}
	catch(Exception e)
	{
		out.println("数据库连接失败!!!") ;
	}

	// 3、操作数据库
	// 通过Connection对象实例化Statement对象
	try
	{
		// 声明结果集可上下移动
		stmt = conn.createStatement() ;
		// 取消自动提交
		conn.setAutoCommit(false) ;
		// 编写查询的SQL语句
		// sql = "SELECT id,name,password,age FROM person" ;
		stmt.addBatch("INSERT INTO person (name,password,age) VALUES ('LXH_A','zzzzzz',28)") ;
		stmt.addBatch("INSERT INTO person (name,password,age) VALUES ('LXH_B','zzzzzz',28)") ;
		stmt.addBatch("INSERT INTO person (name,password,age) VALUES ('LXH_C','zzzzzz',28)") ;
		stmt.addBatch("INSERT INTO person (name,password,age) VALUES ('LXH_D','zzzzzz',28)") ;
		stmt.addBatch("INSERT INTO person (name,password,age) VALUES ('LXH_E','zzzzzz',28)") ;
		stmt.addBatch("INSERT INTO person (name,password,age) VALUES ('LXH_F','zzzzzz',28)") ;
		stmt.addBatch("INSERT INTO person (name,password,age) VALUES ('LXH_G','zzzzzz',28)") ;
		stmt.addBatch("INSERT INTO person (name,password,age) VALUES ('LXH_H','zzzzzz',28)") ;
		// 执行批处理语句
		stmt.executeBatch() ;
		// 如果没有异常,则执行此段代码
		// 提交事务,真正向数据库中插入数据
		conn.commit() ;
	}
	catch(Exception e)
	{
		// 将数据库回滚
		try
		{
			conn.rollback() ;
		}
		catch(Exception e1)
		{}
		out.println("操作数据库失败!!!") ;
	}
	// 4、关闭数据库
	try
	{
		// 关闭结果集
		// rs.close() ;
		// 关闭操作
		stmt.close() ;
		// 关闭连接
		conn.close() ;
	}
	catch(Exception e)
	{
		out.println("数据库关闭失败!!!") ;
	}
%>



 

 

本文转载自:http://www.cnblogs.com/xqzt/archive/2012/03/30/5637441.html

共有 人打赏支持
小强斋太
粉丝 0
博文 181
码字总数 0
作品 0
广州
数据库原理-事务基本概念

2018-1-9 by Atlas 数据库访问 read(X):把数据X,从磁盘的数据库中读到内存的缓冲区中。 write(X):把数据X,从内存的缓存区写回磁盘的数据库。 ACID性质 1、原子性(Atomicity) 一个事...

水天云黑白
01/09
0
0
脱离 Spring 实现复杂嵌套事务,之三(REQUIRES_NEW - 独立事务)

本文是<实现 Spring 的事务控制>系列文章中一篇。本文假设读者已经阅读并理解《实现 Spring 的事务控制,之一(必要的概念)》文中所涉及的概念(当前连接、引用计数),以及数据库连接的(n...

哈库纳
2014/02/14
0
0
对事物的理解

事务(Transaction)是并发控制的单位,是用户定义的一个操作序列。这些操作要么都做,要么都不做,是一个不可分割的工作单位。通过事务,SQL Server能将逻辑相关的一组操作绑定在一起,以便...

专注97
2016/01/26
30
0
脱离 Spring 实现复杂嵌套事务,之六(NOT_SUPPORTED - 非事务方式)

本文是<实现 Spring 的事务控制>系列文章中一篇。本文假设读者已经阅读并理解《实现 Spring 的事务控制,之一(必要的概念)》文中所涉及的概念(当前连接、引用计数),以及数据库连接的(n...

哈库纳
2014/02/17
0
8
浅谈数据库事物的四大特性(ACID)以及事物的隔离级别

事物的四大特性  如果一个数据库声称支持事务的操作,那么该数据库必须要具备以下四个特性: ⑴ 原子性(Atomicity)   原子性是指事务包含的所有操作要么全部成功,要么全部失败回滚,因...

HenrySun
2016/08/20
107
0
数据库的ACID与隔离级别随笔

数据库中事务的四大特性(ACID) 如果一个数据库声称支持事务的操作,那么该数据库必须要具备以下四个特性: ⑴ 原子性(Atomicity)   原子性是指事务包含的所有操作要么全部成功,要么全...

一只努力的码农
2017/11/07
0
0
Winform开发框架里面使用事务操作的原理及介绍

在很多情况下,事务是个很有用的东西,可以把一系列的操作组合成一个原子粒度的操作,一旦组合中某个地方出错,可以整个干净的进行滚回,不会留下脏数据;除此之外,事务还能提高批量操作的效...

walb呀
2017/12/04
0
0
史上最简单的 MySQL 教程(三十八)「事务(上)」

案例:银行的数据库里面存储着用户的账户信息表,当用户 A 想用户 B 转账的时候,正常情况下,A 账户的余额减少,B 账户的余额增加;但是由于某种原因(例如突然断电),当 A 账户的余额减少...

qq_35246620
2017/10/21
0
0
分布式事务:分布式事务原理概述

1、什么是分布式事务 分布式事务就是指事务的资源分别位于不同的分布式系统的不同节点之上的事务; 2、分布式事务产生的原因 2.1、数据库分库分表 在单库单表场景下,当业务数据量达到单库单...

绍辉
07/10
0
0
深入理解分布式事务

Spring事务本质是单机下的事务,是由数据库本身保证的。今天,我将介绍一种比较复杂的事务:分布式事务。 1 什么是分布式事务 分布式事务就是指事务的参与者、支持事务的服务器、资源服务器以...

小车车
2016/08/10
7
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

OSChina 周一乱弹 —— 你的朋友圈有点生锈了

Osc乱弹歌单(2018)请戳(这里) 【今日歌曲】 @Devoes :分享Trademark的单曲《Only Love (电视剧《妙手仁心 II》插曲)》: 《Only Love (电视剧《妙手仁心 II》插曲)》- Trademark 手机党少...

小小编辑
今天
162
6
【面试题】盲人坐飞机

有100位乘客乘坐飞机,其中有一位是盲人,每位乘客都按自己的座位号就坐。由于盲人看不见自己的座位号,所以他可能会坐错位置,而自己的座位被占的乘客会随便找个座位就坐。问所有乘客都坐对...

garkey
今天
1
0
谈谈神秘的ES6——(二)ES6的变量

谈谈神秘的ES6——(二)ES6的变量 我们在《零基础入门JavaScript》的时候就说过,在ES5里,变量是有弊端的,我们先来回顾一下。 首先,在ES5中,我们所有的变量都是通过关键字var来定义的。...

JandenMa
今天
1
0
arts-week1

Algorithm 594. Longest Harmonious Subsequence - LeetCode 274. H-Index - LeetCode 219. Contains Duplicate II - LeetCode 217. Contains Duplicate - LeetCode 438. Find All Anagrams ......

yysue
今天
2
0
NNS拍卖合约

前言 关于NNS的介绍,这里就不多做描述,相关的信息可以查看NNS的白皮书http://doc.neons.name/zh_CN/latest/nns_background.html。 首先nns中使用的竞价货币是sgas,关于sgas介绍可以戳htt...

红烧飞鱼
今天
1
0
Java IO类库之管道流PipeInputStream与PipeOutputStream

一、java管道流介绍 在java多线程通信中管道通信是一种重要的通信方式,在java中我们通过配套使用管道输出流PipedOutputStream和管道输入流PipedInputStream完成线程间通信。多线程管道通信的...

老韭菜
今天
0
0
AB 压力测试

Ubuntu 安装AB apapt-get install apache2-utils 使用AB 压力测试 -c 并发数 -n请求总数 ab -c 3000 -n 10000 http://localhost/test/index.php AB只能测试localhost 返回结果 This is Apac......

xiawet
今天
0
0
用Python绘制红楼梦词云图,竟然发现了这个!

Python在数据分析中越来越受欢迎,已经达到了统计学家对R的喜爱程度,Python的拥护者们当然不会落后于R,开发了一个个好玩的数据分析工具,下面我们来看看如何使用Python,来读红楼梦,绘制小...

猫咪编程
今天
1
0
Java中 发出请求获取别人的数据(阿里云 查询IP归属地)

1.效果 调用阿里云的接口 去定位IP地址 2. 代码 /** * 1. Java中远程调用方法 * http://localhost:8080/mavenssm20180519/invokingUrl.action * @Title: invokingUrl * @Description: * @ret......

Lucky_Me
今天
1
0
protobuf学习笔记

相关文档 Protocol buffers(protobuf)入门简介及性能分析 Protobuf学习 - 入门

OSC_fly
昨天
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部