数据库事务性

TPL:事务控制语句

start transaction:开启一次事务
rollback:回滚
commit:提交事务

JDBC中与事务有关的方法:
Connection.setAutoCommit(boolean
b)
Connection.rollback()
Connection.rollback(Savepoint
sp)
Connection.commit();

*****四、事务的特性(隔离级别)
A:原子性。说明事务是一个不可分割的单位。
C:一致性.事务必须使数据库从一个一致性状态变换到另外一个一致性状态.(比如转账)
*I:隔离性。一个事务不能被其他事务打扰。
D:持久性。事务一旦提交,就应该被永久保存起来。

如果不考虑事务的隔离级别,会出现以下“不正确”的情况:
脏读:指一个事务读到了另一个事务中未提交的数据。
不可重复读:针对一条记录的,同一条记录前后不一样
虚读(幻读):针对一张表,前后读到的记录条数不一样。

MySQL中控制事务隔离级别的语句:
select @@tx_isolation; //查看当前的事务隔离级别
set
transaction isolation level 你的级别(四种之一);//设置隔离级别

隔离级别的分类:
READ UNCOMMITTED:脏读、不可重复读、虚读都有可能发生。
READ
COMMITTED:能避免脏读,不可重复读、虚读都有可能发生。
REPEATABLE
READ:能避免脏读、不可重复度,虚读都有可能发生。
SERIALIZABLE:能避免脏读、不可重复度、虚读。


1 create table bank
2 {
3   id int primary key,
4   name varchar(10),
5   money int
6 }

搭建数据库连接

c3p0-config.xml下


1 <?xml version="1.0" encoding="UTF-8"?>
2 <c3p0-config>
3 <default-config>
4 <property name="driverClass">com.mysql.jdbc.Driver</property>
5 <property name="jdbcUrl">jdbc:mysql://127.0.0.1:3306/bank</property>
6 <property name="user">root</property>
7 <property name="password">mima</property>
8 </default-config>
9 </c3p0-config>

JdbcUtil.java   导入相关的类


1 public class JdbcUtil {
2 private static ComboPooledDataSource dataSource =new ComboPooledDataSource();
3 public static ComboPooledDataSource getDataSource()
4 {
5 return dataSource;
6 }
7 }

测试代码 。 注意 事务是针对一次连接Connection的,如果

 QueryRunner runner =new  QueryRunner(ds);    的话可能对于连接 会有不同的Connecton就达不到效果了


 1     public static void main(String[] args) throws Exception  {
2 DataSource ds=JdbcUtil.getDataSource();
3 Connection con=ds.getConnection();
4 QueryRunner runner =new QueryRunner();
5 try {
6 con.setAutoCommit(false);
7 } catch (SQLException e1) {
8 e1.printStackTrace();
9 }
10 try {
11 String sql1="update money_table set money=money+1000 where name = ?";
12 runner.update(con,sql1, new Object[]{"aa"});
13 int i=1/0;
14 String sql2="update money_table set money=money-1000 where name = ?";
15 runner.update(con,sql2, new Object[]{"bb"});
16 con.commit();
17
18 } catch (Exception e) {
19 try {
20 con.rollback();
21 } catch (SQLException e1) {
22 e1.printStackTrace();
23 }
24 e.printStackTrace();
25 }
26 finally
27 {
28
29 }
30
31 }

数据正常。


 1     public static void main(String[] args) throws Exception  {
2 DataSource ds=JdbcUtil.getDataSource();
3 Connection con=ds.getConnection();
4 QueryRunner runner =new QueryRunner();
5 try {
6 con.setAutoCommit(false);
7 } catch (SQLException e1) {
8 e1.printStackTrace();
9 }
10 Savepoint sp=null;
11 try {
12 String sql1="update money_table set money=money+1000 where name = ?";
13 runner.update(con,sql1, new Object[]{"aa"});
14 String sql2="update money_table set money=money-1000 where name = ?";
15 runner.update(con,sql2, new Object[]{"bb"});
16 sp=con.setSavepoint();
17 int i=1/0;
18 String sql3="update money_table set money=money+1000 where name = ?";
19 runner.update(con,sql3, new Object[]{"cc"});
20 String sql4="update money_table set money=money-1000 where name = ?";
21 runner.update(con,sql4, new Object[]{"dd"});
22
23
24 } catch (Exception e) {
25 try {
26 con.rollback(sp);
27 } catch (SQLException e1) {
28 e1.printStackTrace();
29 }
30 e.printStackTrace();
31 }
32 finally
33 {
34 con.commit();
35 }
36
37 }

数据库事务性

时间: 2024-08-30 03:56:48

数据库事务性的相关文章

hbase非结构化数据库与结构化数据库比较

目的:了解hbase与支持海量数据查询的特性以及实现方式 传统关系型数据库特点及局限 传统数据库事务性特别强,要求数据完整性及安全性,造成系统可用性以及伸缩性大打折扣.对于高并发的访问量,数据库性能不是很好,类似于互联网这样的访问量容易造成宕机. hbase hbase是基于列存储的数据库与传统的基于行存储的关系型数据库相比,可扩展性好.Hbase是一个面向列存储的分布式存储系统,它的优点在于可以实现高性能的并发读写操作,同时Hbase还会对数据进行透明的切分,这样就使得存储本身具有了水平伸缩性

什么是SQL Server代理服务?其作用是什么?

SQL Server Agent代理服务,是sql server的一个标准服务,作用是代理执行所有sql的自动化任务,以及数据库事务性复制等无人值守任务. 这个服务在默认安装情况下是停止状态,需要手动启动,或改为自动运动,否则sql的自动化任务都不会执行的,还要注意服务的启动帐户.

分布式协议之两阶段提交协议(2PC)和改进三阶段提交协议(3PC)

一. 事务的ACID 事务是保证数据库从一个一致性的状态永久地变成另外一个一致性状态的根本,其中,ACID是事务的基本特性. A是Atomicity,原子性.一个事务往往涉及到许多的子操作,原子性则保证这些子操作要么都做,要么都不做,而不至于出现事务的部分操 作成功,而另外一部分操作没有成功.如果事务在执行的过程中发生错误,那么数据库将回滚到事务发生之前的状态.比如银行的转账服务, 这个事务的最终结果一定是:某个账户的余额增加了x,而另外一个账户的余额减少了x,或者两个账户的余额未发生变化.而不

2.大约QT数据库操作,简单的数据库连接操作,增删改查数据库,QSqlTableModel和QTableView,事务性操作,大约QItemDelegate 代理

 Linux下的qt安装,命令时:sudoapt-get install qt-sdk 安装mysql数据库,安装方法參考博客:http://blog.csdn.net/tototuzuoquan/article/details/39565783 假设行想进数据库开发.须要安装libqt5sql5-mysql.命令是: sudo apt-get install libqt5sql5-mysql 4 创建一个项目 要调用数据库.须要加上QT += gui widgets sql  也就是说要加

架构设计:系统存储(8)——MySQL数据库性能优化(4)

================================ (接上文<架构设计:系统存储(7)--MySQL数据库性能优化(3)>) 4-3.InnoDB中的锁 虽然锁机制是InnoDB引擎中为了保证事务性而自然存在的,在索引.表结构.配置参数一定的前提下,InnoDB引擎加锁过程是一样的,所以理论上来说也就不存在"锁机制能够提升性能"这样的说法.但如果技术人员不理解InnoDB中的锁机制或者混乱.错误的索引定义和同样混乱的SQL写操作语句共同作用,那么导致死锁出现的

MySQL数据库(7)_用户操作与权限管理、视图、存储过程、触发器、基本函数

用户操作与权限管理 MySQL用户操作 创建用户 方法一: CREATE USER语句创建 CREATE USER "用户名"@"IP地址" IDENTIFIED BY "密码"; 方法二: INSERT语句创建 INSERT INTO mysql.user(user,host, password,ssl_cipher,x509_issuer,x509_subject) VALUES('用户名','IP地址',password('密码'),'',

关系型数据库知识小结

一.基础术语 DML(data manipulation language): 如SELECT.UPDATE.INSERT.DELETE,主要用来对数据库里的数据进行操作的语言 DDL(data definition language): 主要的命令有CREATE.ALTER.DROP等,DDL主要是用在定义或改变表(TABLE)的结构,数据类型,表之间的链接和约束等初始化工作上,大多在建立表时使用. DCL(Data Control Language):数据库控制功能.是用来设置或更改数据库用

数据库之——索引、触发器、事务(存储引擎)

一. 数据库 数据库(DataBase)是按照数据结构来组织.存储和管理数据的仓库.其主要特点有如下几个方面: 实现数据共享 数据共享包含所有用户可同时存取数据库中的数据,也包括用户可以用各种方式通过接口使用数据库,并提供数据共享: 减少数据的冗余度 同文件系统相比,由于数据库实现了数据共享,从而避免了用户各自建立应用文件.减少了大量重复数据,减少了数据冗余,维护了数据的一致性: 数据的独立性 数据的独立性包括逻辑独立性(数据库中数据库的逻辑结构和应用程序相互独立)和物理独立性(数据物理结构的变

数据库事务解析

数据库事务(Database Transaction) ,是指作为单个逻辑工作单元执行的一系列操作,要么完全地执行,要么完全地不执行. 事务处理可以确保除非事务性单元内的所有操作都成功完成,否则不会永久更新面向数据的资源.通过将一组相关操作组合为一个要么全部成功要么全部失败的单元,可以简化错误恢复并使应用程序更加可靠.一个逻辑工作单元要成为事务,必须满足所谓的ACID(原子性.一致性.隔离性和持久性)属性.事务是数据库运行中的一个逻辑工作单位,由DBMS中的事务管理子系统负责事务的处理. 1.操